Further to my comment:
I ran across a very similar issue with get_sidebar()
, which I expected (incorrectly) to work the same as get_template_part()
. A work-around is to do something like this:
// instead of using get_header( '404' ); , do this:
get_template_part( 'header', '404' );
// which should select 'header-404.php', or, if it doesn't
// exist, fail over to 'header.php'