Just to answer my own question in the case someone else runs into it, the solution was to resume the comet before removing the handler from the context. Since I was streaming, I never normally trigger a resume, but evidently by not calling it when the stream is terminated, it causes Grizzly to never stop notifying comet that something's happened with the comet even though the comet in question was already removed (hence why CometEngine.interrupt never found a comet context to remove).
[Message sent by forum member 'dchemko']
http://forums.java.net/jive/thread.jspa?messageID=480246