It's been a little while, but what I think happened was this:
- the date is entered on the client. It doesn't really have a time, but it's implicitly 12 AM (i.e. zero).
- the date is saved to the server -- it adjusts the time according to the difference in the time zone (back one hour in my case), making it 11 PM (2300) on the previous date
- when I next display the date, the code cuts off the time portion, and ends up with the previous date
I fixed the problem by forcing the system to take the dates as UTC everywhere, so it would stop converting it. Was a bit painful, though. I think it's unfortunate that .NET doesn't have a proper Date type rather than just use DateTime for everything.