Have you tried stepping through the program with a debugger to see where it hangs?
It could be one minute, it could be 30 minutes and it might not happen at all. I've sat around playing while running the debugger and of those few times, it didn't freeze.
I suppose I could write a function that logs which function was called and put that at the beginning of each function. I don't know, it's frustrating. Also, it didn't freeze when I was using several different profilers (when I was checking out different Window's profilers).
***!!!!!!!!!!!!!!!!!! UPDATE !!!!!!!!!!!!!!!!!!!!!***
Okay, something just happened that might be a big clue as to what's happening, maybe not. Read on, fellow good-doers.
I decided to open up a console window along side my program and output debug messages to it. In the main function that calls each object's update function, I put a call before and after, letting me know if an object completed or if stalled. I did this for the drawing as well.
Then, I saved and ran it. About 10 minutes into playing and the game freezes, but guess what, messages are still being relayed to the console window! The game itself is "Not Responding". I do a "pause" on the console to see what's still going (thinking everything is still going). Then, I notice I'm only seeing the drawing functions! There are no logs about anything being updated. You'd think there's something wrong with my timer logic, but would that cause windows to declare the program "Not Resonding" in the task manager?
I've got some cookies with your names on them...