IMO this is not a bug in block module; it's a bug in whatever is calling theme() or init_theme() before block module has a chance to set custom_theme.
Interesting. I added var_dump(debug_backtrace()); exit(); to init_theme() after the if(isset($theme)) section and found that the first functiont that calls init_theme(). As best I can tell, system_init() (system.module around line 700) is the first function to call theme() function. It is the reason that the block module cannot change the theme later on. backtrace looks like this: init_theme() -> theme() -> system_init() -> call_user_func_array() -> module_invoke_all() -> _drupal_bootstrap_full() -> _drupal_bootstrap() -> drupal_bootstrap() I am not sure the problem is with system_init(). Shouldn't the block module just use a hook_init() instead? Thanks Jon