Must at least one bundle have the same name as the entity in hook_entity_info()?
No, it's not required. It's not necessary to have a bundle whose machine name is the same machine name used for the entity type. And no, defining bundles doesn't make the entity more abstract in any way.

See, for example, node_entity_info(), where none of the content types (which are node bundles) is called node. Vice versa, in user_entity_info() the only bundle is user.
What you can gather from the implementations of hook_entity_info() done from Drupal core modules is that entities with a single bundle use the same machine name for the bundle and the entity. That is not mandatory, though. 

What Drupal assumes is that, if hook_entity_info() doesn't define any bundle, the entity has a single bundle named after the entity type. See entity_get_info().

    // If no bundle key is provided, assume a single bundle, named after
    // the entity type.
    if (empty($entity_info[$name]['entity keys']['bundle']) &amp;&amp; empty($entity_info[$name]['bundles'])) {
      $entity_info[$name]['bundles'] = array(
        $name =&gt; array(
          'label' =&gt; $entity_info[$name]['label'],
        ),
      );
    }