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.