Hast du das exakt so im Quellcde stehen? Also kein Zeilenumbruch oder Whitespace zwischen <li class="foo"> und <h3>? - Denn dann wäre der Textknoten, der den Whitespace enthält, das erste Kind.
Das würde auf :-moz-first-node
zutreffen, :first-child
selektiert den ersten Elementknoten.