It should always be "safe" to cast to `EntityInternal` (or `ManagementContextInternal` etc) - i.e. every Entity should implement `EntityInternal` etc. 

I also worry about this - particularly that we need to cast it to `EntityInternal`. That should really only be needed by framework code that is doing special stuff to manage the lifecycle of an entity for example.