The frame I am using is a GUI frame - but if I remember correctly (and I
might be wrong) the crash happened when making emacs fullscreen.
This is a vital clue.
If I remember correctly, when Emacs change between normal and full screen mode, it creates a new OS X window and discards the old. It uses two different Objective-C types EmacsWindow and EmacsFSWindow. (I'll can verify the details at home, where I have access to the source code.)
My guess is that in this transition, some things are not fully set up when the callback arrives.