Did you leave in the whole
<?php if (have_posts()) : ?>
bit of code in your 404 template?
I was getting a blank 404 result on one of my templates and then I thought to remove all of those related snippets, removed the related
<?php endif; ?>
tags, the page navigation bits and voila!
My 404 results now show the intended information and layout without any
problems. No messing with my .htaccess file, no messing with my permalinks etc. Simply discovered my blunder of leaving in the post query in the 404 template – maybe you copied that stuff in there by accident, too?