Yeah, that’s a bit of a mess. 
So these stem from c10 and the c10 namespace, but are also available in the at (and torch) namespace.
kHalf is an alias for ScalarType::Half; historically, it was common to use the kFloat, kLong,… types and there have been some refactorings until we arrived at the ScalarType we have today (or at least t.scalar_type()  is newer than some PyTorch code). ScalarType::Half it is a type identifier (ScalarType is the C++ side fo dtype).
Half is a type like int64_t, it matches half or __half when the platform has one and provides the usual ops. This is an abstraction that allows templating to include Half where one would have to do crazy dances around not defined things otherwise).
Best regards
Thomas