If you're doing this in with custom code, you should give http://drupal.org/project/sections a try. The module has been thoroughly tested and works AFAIK. Similar, but different purpose is http://drupal.org/project/switchtheme.
Thanks. I will check out these modules
You should not try to change the theme on block administration pages. Above mentioned modules implement exactly this exception.
As for the bug in the block module, I think there is actually a good reason that the author of the block module in core is trying (but not succeeding) to change the theme on block administration pages. As you to edit blocks for different themes in the block admin it helps to have the active theme change accordingly so that a user can see where on the page the block regions will be appearing. Different themes can have different arrangements of regions. The bug occurs when the block_admin_display() function changes $custom_theme variable and calls init_theme(). The global variable $theme has already been set by a previous init_theme() call somehwere in drupal so init_theme() is essentially ignored in block_admin_display(). The theme does not change. That is why we are seeing the wrong list of blocks appear for any theme that is not the active theme. So... how best to deal with this? Do we: 1) always show the current default theme when editing blocks for other themes (even though region arrangements might differ theme to theme) or 2) do we write a block_init() hook to change the theme each time a user chooses to edit blocks for a specific theme in the block admin. I wonder how this would affect users that choose to use the admin theme setting. Thoughts on this one? Thanks Jon