One of the main goals of the D8 Entity API is making entities storage-agnostic.
is going to allow us to make entity storage swappable, as the Entity Storage controller will have full responsibility over field data. The big missing piece is entity querying: currently entity-defining modules use hardcoded SQL queries to retrieve sets of entities and often retrieve partial data. This does not make sense as this way the Entity API is completely bypassed. Instead we need to convert all entity SQL queries to the Entity Query API and fully load entities whenever we need their data.
This will probably have a performance impact, but we can leverage entity caching and lazy loading as mitigating strategies, once only the Entity API is used to access entity data. Morover these can be implemented as internal refactorings without breaking the public API.
As a side note, there is consensus that once the Entity Storage API is complete and core code has adopted it, we can still change the underlying SQL schema without affecting contrib modules relying on the API to access entity data. This will allow for further refactorings, such as improving multilingual support for entity types still missing it.