Sometimes people face the "strange" issue where the session state variables simply lose their values when Session timeout has not even occured. This behavior is not replicated on their development servers, but occurs frequently on the web server.
One reason for the occurence of the above problem could be Application Pool recycling in IIS 6.0. Application pools are a feature in IIS 6.0 and if a pool gets recycled, then all the applications configured for that pool will lose their state as a restart would occur. For more details, check out this article:
http://www.microsoft.com/technet/technetmag/issues/2006/01/ServingTheWeb/?topics=y