Por defecto, h1 es un elemento de bloque y se representará en la línea después de la primera img, y hará que la segunda img aparezca en la línea que sigue al bloque.
Para evitar que esto ocurra, puede configurar el h1 para que tenga un comportamiento de flujo en línea:
#header > h1 { display: inline; }
En cuanto a posicionar absolutamente el img dentro del div , debe configurar el div que lo contiene para que tenga un "tamaño conocido" antes de que esto funcione correctamente. En mi experiencia, también necesita cambiar el atributo de posición lejos de la posición predeterminada: position: relative funciona para mí:
#header { position: relative; width: 20em; height: 20em; }
#img-for-abs-positioning { position: absolute; top: 0; left: 0; }
Si puede hacer que eso funcione, puede intentar eliminar progresivamente los atributos de altura, ancho y posición de div.header para obtener los atributos mínimos necesarios para obtener el efecto que desea.
ACTUALIZAR:
Aquí hay un ejemplo completo que funciona en Firefox 3:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Example of vertical positioning inside a div</title>
<style type="text/css">
#header > h1 { display: inline; }
#header { border: solid 1px red;
position: relative; }
#img-for-abs-positioning { position: absolute;
bottom: -1em; right: 2em; }
</style>
</head>
<body>
<div id="header">
<img src="#" alt="Image 1" width="40" height="40" />
<h1>Header</h1>
<img src="#" alt="Image 2" width="40" height="40"
id="img-for-abs-positioning" />
</div>
</body>
</html>