TSubclassOf Bug?

Not a bug. Simply put,

UClass::GetFName()

and

UKismetSystemLibrary::GetDisplayName(const UObject* object)

(the one you call in the BP) are not the same thing.
In theory, if you change your C++ code to

FString ClassName = UKismetSystemLibrary::GetDisplayName(UsingShield->StaticClass());
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, ClassName);

You should get the same result.