The solution is to use a TWeakObjectPtr for your lambda. This is often the case when the object keeping a reference to it does not control the lifetime of the Object.
Unlike Shared Pointers, even UObjects that are “strongly-referenced” can be garbage collected in some cases (e.g, when something explicitly marks them as garbage, they will be GC’d no matter what references them). Unreal will automatically null UPROPERTY() references when this happens (but does not deal with special types like FGCObject or TStrongObjectPtr etc.)
Note: This is allegedly changing in the near future, as part of an extremely unwelcome change to the GC system which I pray remains optional.
IsValid() will not be safe in this case either, because if the UObject is in fact GC’d, the captured pointer can be anything.