I guess I just didn’t try enough things…
// "provided"
SpawnableItem = inItem->StaticClass();
// "change to"
SpawnableItem = inItem->GetClass();
it is probably because the inT->StaticClass() will return the UClass of the type as it was last known, and because it hasn’t been cast at that point it is still of type ( in this case AMyItemPickup instead of BPMyItemPickup)
while inT->GetClass() is returning the Class id that the item is regardless of what type the pointer was received as, so technically the signature could have been
// "not great for so many reasons"
bool RegisterSpawnable(UObject* inItem)
though that might have created a debug nightmare in a different way.