UClass does derive from UObject. TSubclassOf is just a wrapper that holds a pointer to a UClass.
So IsValid() is correct.
And you shouldn’t need to call .Get() on a TSubclassOf. It should just work. I have tried it and it compiles.
edit: The reason it works with TSubclassOf despite not deriving from UObject is because it has an operator that will return the contained pointer and since that pointer does derive from a UObject, it should just work. These are implicit conversions that the compiler will do.