>> Most likely, somewhere along the way it's moving the pointer and then returning the original instead of the new one. 

> boost::function<bool(boost::shared_ptr<const Boom>&)>
> This somehow prevents too much forwarding and losing the original value

Ahhh yes now it all makes sense.  And why raw pointer still worked.

Thank you!!!  That's just ... pure evil.  Not the principle of least surprise!