Using function from [this guide][1] to convert enum values to strings:
template<typename TEnum>
FString GetEnumValueAsString(const FString& Name, TEnum Value)
{
    const UEnum* enumPtr = FindObject<UEnum>(ANY_PACKAGE, *Name, true);
    if (!enumPtr)
    {
        return FString("Invalid");
    }
    return enumPtr->GetEnumName((int32)Value);
}
The enum is:
UENUM(BlueprintType)
enum class ETestEnum : uint8
{
    Unknown                 UMETA(Hidden),
    Value1                  UMETA(DisplayName = "Value1"),
    Value2                  UMETA(DisplayName = "Value2"),
    Value3 = 20             UMETA(DisplayName = "Value3"),
    Value4                  UMETA(DisplayName = "Value4"),
    MAX                     UMETA(Hidden),
};
Using following to output on the screen:
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("[%s] [%s] [%s] [%s] [%s]")
        , *GetEnumValueAsString<ETestEnum>("ETestEnum", ETestEnum::Unknown)
        , *GetEnumValueAsString<ETestEnum>("ETestEnum", ETestEnum::Value1)
        , *GetEnumValueAsString<ETestEnum>("ETestEnum", ETestEnum::Value2)
        , *GetEnumValueAsString<ETestEnum>("ETestEnum", ETestEnum::Value3)
        , *GetEnumValueAsString<ETestEnum>("ETestEnum", ETestEnum::Value4)
        ));
The result is:

Is this known issue or am I doing something wrong?