Hi Adam :)
Thanks for posting your template and code here. I have taken a look into it. I believe there is an easier way to achieve what you are looking for. Please see the structure of a footnote in your Document as shown in the Demo project DocumentExplorer below:

As you can see the footnote is represented by a Footnote node inline directly after the reference in the main text. This node is an inline story so contains child nodes of paragraphs and runs which make up the footnote as seen at the bottom of the page in MS Word.
In this case we should be able to simply search for the Footnote nodes in document and then work with paragraph and the footnote text easily from there. Please see the sample implementation below which does this.
Document doc = new Document("Aspose.docx");
NodeCollection nodes = doc.getChildNodes(NodeType.FOOTNOTE, true);
for(Footnote footNote : nodes) {
String parentParaText = footNote.getParentParagraph().toTxt().trim();
String footNoteText = footNote.toTxt().trim();
String outputText = parentParaText + " " + "";
System.out.println(outputText);
}
There should be no problem with the footnotes being referenced from text inside the header. The reason this was a problem with your original code was because the Header and Footers are separate nodes from the main body of text in a Document. You can see this in the screen shot above as the HeaderFooter node is separate from the Body node.
In order to work with in the header in the Document you can call the getHeadersFooters method on each Section in your document. It will return a HeaderFooter object which you can work with.
If you have any further inquries, please feel free to ask.
Thanks,