In the documentation for entity_view it states:

Return value

The renderable array, keyed by the entity type and by entity identifiers, for which the entity name is used if existing - see entity_id(). If there is no information on how to view an entity, FALSE is returned.

I have an entity that has both an ID value and a name associated. Here's the export from entity_get_info

label (String, 13 characters ) Academic Body
base table (String, 17 characters ) eck_academic_body
entity class (String, 6 characters ) Entity
controller class (String, 19 characters ) EntityAPIController
access callback (String, 18 characters ) eck__entity_access | (Callback) eck__entity_access();
module (String, 3 characters ) eck
fieldable (Boolean) TRUE
entity keys (Array, 5 elements)
  id (String, 2 characters ) id
  bundle (String, 4 characters ) type
  revision (String, 0 characters )
  label (String, 5 characters ) title
  name (String, 18 characters ) academic_body_code

When I call entity_id() with an instance of this entity type, it returns the machine name as expected. However, entity_view() returns the following array

academic_body (Array, 1 element)
  108 (Array, 10 elements)
    field_avatar (Array, 16 elements)
    #pre_render (Array, 1 element)
    #entity_type (String, 13 characters ) academic_body
    #bundle (String, 13 characters ) academic_body

Note the array is keyed by the numeric value, not the machine name.

I've followed the logic in Entity API to the elseif in http://drupalcontrib.org/api/drupal/contributions!entity!entity.module/f...

  elseif (in_array('EntityAPIControllerInterface', class_implements($info['controller class']))) {
    return entity_get_controller($entity_type)->view($entities, $view_mode, $langcode, $page);
  }

The entity_get_controller calls EntityAPIController::view

Which then uses

// For Field API and entity_prepare_view, the entities have to be keyed by
  // (numeric) id.
  $entities = entity_key_array_by_property($entities, $this->idKey);

Meaning there's no way the machine name would ever be used to key the return array.

This may be by design or an issue with documentation. I would imagine this is a bug in Entity API and would explain some of the other issues revolving around machine names with entities.

In any case, hopefully this helps. With some feedback, I'd be willing to write a patch to fix the issue. However a lot of testing would be required considering it may involve changing the default entity api controller.