**I have been using the following solution (with no positioning and no line height) since over a year, it works with IE 7 and 8 as well.**

    <style>
    .outer {
    	font-size: 0;
    	width: 400px;
    	height: 400px;
    	background: orange;
    	text-align: center;
    	display: inline-block;
    }
    
    .outer .emptyDiv {
    	height: 100%;
    	background: orange;
    	visibility: collapse;
    }
    
    .outer .inner {
    	padding: 10px;
    	background: red;
    	font: bold 12px Arial;
    }
    
    .verticalCenter {
    	display: inline-block;
    	*display: inline;
    	zoom: 1;
    	vertical-align: middle;
    }
    </style>
    
    <div class="outer">
    	<div class="emptyDiv verticalCenter"></div>
    	<div class="inner verticalCenter">
    		<p>Line 1</p>
    		<p>Line 2</p>
    	</div>
    </div>