I was having the same unwanted tags problem but with un-orthodox code below. This code allows to show pure CSS popups with additional details when a user hovers over the link.
<dt>
<a class="thumbnail" href="#"> link text
<span class="popup">
<span class="caption"> title </span>
<img src='.../uploads/2007/04/image.jpg' />
<p>pop-up description</p>
</span>
</a>
</dt>
<dd>description</dd>
I was getting the same dreadful extra <p> tag. But since i’m not using the divs here the mentioned solutions didn’t work. I’m not familiar with regex so hacking the formatting.php was not an option. So I added span, a, and img to the $allblocks array in formatting.php. That fixed the <p> problem, but now I’m wondering what is it going to break.
I understand that the WP usability requires this kind of code filtering and formatting. However, there are times when it is undesirable. Is there a WP specific tag or plugin that would escape a block of code from this processing?