I've changed a couple of things. I now create the Editpoint first and use it to set the bookmark rather than setting the bookmark on the selection then creating an editpoint. This removes that possibility that I save a different place then where I set the bookmark.
The more important issue is I keep a member variable for _applicationObject.Events.DebuggerEvents. Why? Because it keeps that event provider from getting garbage collected. I had made the assumption that the lifetime of _applicationObject.Events.DebuggerEvents would be strictly tied to the DTE object, and managed by automation. That is not the case. The way this bug manifests is pretty ugly since the Addin works as expected for a while, until the Event Provider (_applicationObject.Events.DebuggerEvents) is collected and Finalized, at which point the events just stop coming.
I wasn't sure if this was by design or not. However, I found this KB article: Visual Studio .Net events being disconnected from add-in, so I am going with it being by design.