The idea is: the fewer classes make an assumption that a target object is already managed by a shared_ptr - the fewer ways to make a mistake.
Pass TargetSP to filters' CreateFromStructuredData, don't let them guess whether the target object is managed by a shared_ptr.
Make Breakpoint sure that m_target.shared_from_this() is safe by passing TargetSP to all its static Create*** member-functions.
This should be enough since Breakpoint's constructors are private/protected and never called directly (except by Target itself).
The patch is a consequence of D74556.