Although what you are describing should work in principle (ASP.NET session persists across the farm) it remains that the ASP.NET session is a shared resource you do not necessarily control. Maybe the data size is what is causing the session failures. You should try to see if changing the size of your object changes the failure characteristics (what if you store a single-character value, will it also dissapear?)
Also, when you say "a few loads", is it a number which varies all the time, or is it always the same, say, "three"
Although I am not sure what your issue is exactly, one workaround I would suggest is to store your shared data in a data connection, such as webservice. This has a huge advantage of your form being able to run the same on both client and server without writing different code for each. After all, data connections are first-class citizens in InfoPath!
Hope this makes sense,
Dave.
David Airapetyan / Software Services ArchitectQdabra® Software / Streamline data gathering to turn process into knowledge