Right now, entity types are not exposed as proper typed data API types. There is just a type 'entity', which gets you a typed data object *wrapping* the actual entity object. But furthermore, $entity is an instance of the ComplexDataInterface of the typed data API and with #1778178: Convert comments to the new Entity Field API also an instanced of the ContextAwareInterface.
First, I'd consider this a DX is wtf, it's implementing the typed data just the half way, while all the derived fields are implementing it the full way, i.e. you can call $field->getType() or $field->getDefinition() what you cannot do for an entity.
Second, this special separation makes things more complex, e.g. it will cause problems when implementing #1696648: [META] Untie entity validation from form validation based upon TypedData validation (as the entity itself does not implement the TypedDataInterface - ouch).
Third, the parent relationship of typed data APIs is broken for entities. E.g. when you have a referenced entity and you use the TypedData API to derive a property of the entity from the TypedData object (EntityWrapper), it's parent will be another object (the entity object) - ouch. Also, right now $typed_data->getParent() cannot assume the parent is typed data, it can just assume it's complex data or a list. We should fix that.
Once we've done, we can let the TypedData ListInterface and ComplexDataInterface extend the TypedDataInterface also - we do not need to support implementing the API half-way any more ;-)
I'm thinking about options to implement this best such that it results in no WTFs, will come back with my thoughts.