Index: themes/seven/template.php
===================================================================
RCS file: /cvs/drupal/drupal/themes/seven/template.php,v
retrieving revision 1.14
diff -u -r1.14 template.php
--- themes/seven/template.php	3 Mar 2010 19:46:26 -0000	1.14
+++ themes/seven/template.php	12 Mar 2010 23:44:09 -0000
@@ -2,6 +2,18 @@
 // $Id: template.php,v 1.14 2010/03/03 19:46:26 dries Exp $
 
 /**
+ * Override or insert variables into the maintenance page template.
+ */
+function seven_preprocess_maintenance_page(&$vars) {
+  // While markup for normal pages is split into page.tpl.php and html.tpl.php,
+  // the markup for the maintenance page is all in the single
+  // maintenance-page.tpl.php template. So, to have what's done in
+  // seven_preprocess_html() also happen on the maintenance page, it has to be
+  // called here.
+  seven_preprocess_html($vars);
+}
+
+/**
  * Override or insert variables into the html template.
  */
 function seven_preprocess_html(&$vars) {
Index: includes/theme.maintenance.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.maintenance.inc,v
retrieving revision 1.54
diff -u -r1.54 theme.maintenance.inc
--- includes/theme.maintenance.inc	25 Feb 2010 20:57:39 -0000	1.54
+++ includes/theme.maintenance.inc	12 Mar 2010 23:44:09 -0000
@@ -132,12 +132,6 @@ function theme_install_page($variables) {
 
   // Delay setting the message variable so it can be processed below.
   $variables['show_messages'] = FALSE;
-  // Variable processors invoked manually since this function and theme_update_page()
-  // are exceptions in how it works within the theme system.
-  template_preprocess($variables, 'install_page');
-  template_preprocess_maintenance_page($variables);
-  template_process($variables, 'install_page');
-  template_process_maintenance_page($variables);
 
   // Special handling of error messages
   $messages = drupal_set_message();
@@ -162,20 +156,7 @@
     $variables['messages'] .= theme('status_messages', array('display' => 'status'));
   }
 
-  // This was called as a theme hook (not template), so we need to fix
-  // path_to_theme() for the template, to point at the actual theme rather than
-  // system module as owner of the hook. Additionally, figure out the
-  // maintenance page template to use.
-  global $theme_path, $theme_info, $base_theme_info;
-  $theme_path = dirname($theme_info->uri);
-  $base_themes = $base_theme_info;
-  // Make sure a maintenance-page.tpl.php is always found.
-  $base_themes[] = 'modules/system';
-  while (!file_exists($theme_path . '/maintenance-page.tpl.php') && $base_theme = array_shift($base_themes)) {
-    $theme_path = dirname($base_theme->uri);
-  }
-
-  return theme_render_template($theme_path . '/maintenance-page.tpl.php', $variables);
+  return theme('maintenance_page', $variables);
 }
 
 /**
@@ -193,13 +174,6 @@ function theme_update_page($variables) {
   // Set required headers.
   drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
 
-  // Variable processors invoked manually since this function and theme_install_page()
-  // are exceptions in how it works within the theme system.
-  template_preprocess($variables, 'update_page');
-  template_preprocess_maintenance_page($variables);
-  template_process($variables, 'update_page');
-  template_process_maintenance_page($variables);
-
   // Special handling of warning messages.
   $messages = drupal_set_message();
   if (isset($messages['warning'])) {
@@ -208,20 +182,7 @@
     $variables['messages'] .= theme('status_messages', array('display' => 'warning'));
   }
 
-  // This was called as a theme hook (not template), so we need to fix
-  // path_to_theme() for the template, to point at the actual theme rather than
-  // system module as owner of the hook. Additionally, figure out the
-  // maintenance page template to use.
-  global $theme_path, $theme_info, $base_theme_info;
-  $theme_path = dirname($theme_info->uri);
-  $base_themes = $base_theme_info;
-  // Make sure a maintenance-page.tpl.php is always found.
-  $base_themes[] = 'modules/system';
-  while (!file_exists($theme_path . '/maintenance-page.tpl.php') && $base_theme = array_shift($base_themes)) {
-    $theme_path = dirname($base_theme->uri);
-  }
-
-  return theme_render_template($theme_path . '/maintenance-page.tpl.php', $variables);
+  return theme('maintenance_page', $variables);
 }
 
 /**
