CallDelegateOnMainThreadMBS Can't Handle Nil Variants

Claude sorted it for me. Instead of storing interface objects and directly calling methods on them, “Forwarder” objects are instantiated and stored for each target object. Each Forwarder has a WeakRef to the target and its own method with the required signature, which in turn calls the interface method on the target:

Public Sub HandleNotification(EventType As String, Details As Variant)
  If Target <> Nil And Target.Value <> Nil Then
    EventHandlerIJ(Target.Value).HandleNotification(EventType, Details)
  End
End Sub

AddressOf can now be called on the HandleNotification method of the Forwarder object, so it works with the MBS method:

Dim fwd As NotificationForwarder = HandlersArray(HandlerIndex)

If fwd.Target.Value <> Nil Then
  CallDelegateOnMainThreadMBS AddressOf fwd.HandleNotification, EventType, Details
End If