Difference between #type and #theme in Render API
The purpose is a little different:


'#type' is telling to the render API to merge what returned from hook_element_info()
'#theme' is saying to the render API which theme function to use


In the example you are making, the theme function used is theme_html_tag() because system_element_info() returns the following data.

  $types['html_tag'] = array(
    '#theme' =&gt; 'html_tag',
    '#pre_render' =&gt; array('drupal_pre_render_conditional_comments'),
    '#attributes' =&gt; array(),
    '#value' =&gt; NULL,
  );


If '#theme' were set to 'tag_html', theme_tag_html() would be the theme used by the render API.