Unsetting the original Themes menu promotes the Widgets menu to parent and this messes up the screen_icon function which dynamically adds the icons/style to Appearance submenu pages. In my install, I'm not interested in promoting my replacement themes page as the parent and prefer the Widget menu at the top of the Appearance hierarchy now anyway.
So, adding the following bit of style to the admin header hook puts the Appearance icon back in all the submenus of the Widget menu.
I pasted this into the plugin near the top and the icon reappeared:
add_action( 'admin_head', 'ds_unset_themes_icon_css' );
function ds_unset_themes_icon_css() {
echo "<style type=\"text/css\">#icon-widgets{background:transparent url(". admin_url() . "images/icons32.png) no-repeat -11px -5px;}</style>";
}
As well I needed to change this:
<div class="wrap">
to this
<div class="wrap">
<?php screen_icon(); ?>
to add the appearance icon to this plugin themes page.