Remove a block in preprocess
You can use hook_page_alter() to do this. For example, if you wanted to remove the system navigation block from the "sidebar_first" region, you would do something like this:

function MYMODULE_page_alter(&amp;$page) {
  if ($my_condition) {
    $region_name = 'sidebar_first';
    $block_name = 'system_navigation';

    if (isset($page[$region_name][$block_name])) {
      $page[$region_name][$block_name]['#access'] = FALSE;
    }
  }
}