The the code that triggers the event is definitely being executed as evidenced in the Chrome debugger and $(document).data('events')['foo'] contains the binding when the event is triggered, yet when I put a breakpoint in the handler, it doesn't trip. What gives?
I found the problem. Another snippet of code was unbinding the event and rebinding it to a different function. I didn't notice this because the Chrome debugger doesn't show the guts of the function. Is there a way to see that in Chrome?