Programatically switch page template?

you can use template_redirect action hook to php include your maintenance mode template file using a simple option in options database.

When you turn maintenance mode on add an option for example:

add_option('maintenance_mode_on');

then with this code you check if that option is set and if so you redirect to your desired template file:

function custom_maintenance_mode_template_redirect() {
    global $wp;
    if(get_option('maintenance_mode_on')){
        status_header(200); // a 404 code will not be returned in the HTTP headers if the page does not exists

        include(TEMPLATEPATH . "/Custom_template.php"); // include the corresponding template
        die();
    }
}
add_action( 'template_redirect', 'custom_maintenance_mode_template_redirect' );

Then when you turn maintenance mode off delete that option :

delete_option('maintenance_mode_on');

Update

If you want to effect the body_class() you can use body_class filter hook:

function custom_body_class($classes){
    if(get_option('maintenance_mode_on')){
            $n_classes[] = "maintenance";
        return $n_classes;
    } else {
        return $classes;
    }
}

add_filter('body_class', 'custom_body_class');

This will change the body_class() to output maintenance when maintenance mode is turned on.

tech