Okay, so I’m 99.9% positive that I’ve found the problem. It has to do with showing the mouse to the screen (although I’m not sure why its affecting everything now when it wasn’t having issues earlier).
If you show the default mouse after you acquire the screen to lock it for drawing to the buffer the program freezes up at random intervals. If you move the show_mouse() call before acquiring the screen or after acquiring the screen the mouse works fine (but flickers).
So I think the best way around the problem is to simply create my own mouse icon and see if that gets rid of the freezing up.