preg_replace( '/<p>(.+)<\/p>/Uuis', '$1', $content );
Tested with this script:
<?php
$c = array();
$c[] = '<p>text</p>';
$c[] = '<p><div>text</div></p>';
$c[] = '<p><div><div>text</div></div></p>';
foreach ( $c as $content ) {
$e = preg_replace( '/<p>(.+)<\/p>/Uuis', '$1', $content );
var_dump( $e );
}
Also try remove_filter( 'the_content', 'wpautop' );