I should add that this problem appears to be intermittent...
What is your session timeout?
I would add that I never use session variables in quite this way, either. My preferred method is to represent any complex session data structures as objects, use them directly and serialize them into the $_SESSION at the end of script execution. When the page next loads, the object is unserialized from the session if it exists, or is constructed from scratch if it doesnt.