Inlining!
It turns out that the horrible bug was tied to inlining the constructor of NodeDragTask. Two solid days of misery have now isolated the issue to four simple lines of code.
But, for the life of me, I can't pin it further. If you have some good war story wisdom on subtle inlining issues in C++, I'd love to hear from you.