I wrote:
I will work on a test case that just uses SBCL's FFI and make that available.
I should have done this first. My simple test case is able to process timer messages whether started via SLIME or not. The problem has something to do with the standard initialization sequence for creating a window. GetMessage is not getting stuck, there just aren't any further messages related to window initialization generated after the first two. Yet timer events continue to get delivered to the same window callback.
I'm back to square one on this problem, so I'll have to narrow this down better before I bother you folks any further.