I know that the plugin [Advanced Custom Field][1] does that.
Checking [its code][2], I saw that he deals with this issue using jQuery.
Using it as reference, I think this should work for you:

    <?php
    /*
     * Usage:
     * adjust $('#poststuff .your_page_box') to your meta box
     * disable the console.log outputs
    */
    function se50092_script_enqueuer() {
        global $current_screen;
    	if($current_screen->id == 'page') {
    		$echo = <<<HTML
    			<script type="text/javascript">
    			jQuery(document).ready( function($) {
    				if($('#page_template').val() == 'page-portfolio.php') {
    					// show the meta box
    					//$('#poststuff .your_page_box').show();
    				} else {
    					// hide your meta box
    					//$('#poststuff .your_page_box').hide();
    				}
    				console.log ('default value = ' + $('#page_template').val());
    
    				$('#page_template').live('change', function(){
    					if($(this).val() == 'page-portfolio.php') {
    						// show the meta box
    						//$('#poststuff .your_page_box').show();
    					} else {
    						// hide your meta box
    						//$('#poststuff .your_page_box').hide();
    					}
    					console.log ('live change value = ' + $(this).val());
    				});					
    			});    
    			</script>
    HTML;
    		echo $echo;		
    	}
    }
    add_action('admin_head', 'se50092_script_enqueuer');


  [1]: http://wordpress.org/extend/plugins/advanced-custom-fields/
  [2]: http://plugins.svn.wordpress.org/advanced-custom-fields/trunk/js/input-ajax.js