Here's the issue: the Postgres SQL driver returns all the timestamp fields as strings (gah). I moved the timezone translation into the database because it's faster there by orders of magnitude... however, I have to translate every timestamp field explicitly. I missed the one that gets returned when checking the user's forum marked-read time.
Since the SQL SELECT code is kept in ZOPE (stored procedures can't return SELECT results in Postgres yet :-( ), I don't have any easy way to globally search for things that need changing. I'm working on a means of putting the source code into CVS, which means I'll be able to check it out and do searches in that fashion. This should make change management a lot cleaner.
Let me know if you still see that problem.