It's difficult to debug this for you without seeing the source documents, but this version looks a lot more sane than the previous version.
Are you sure the prefix sg: is used or omitted correctly in all cases?
Quite apart from anything relating to the source document, it's generating invalid HTML: you can't have a <tr> element as a child of another <tr>. I suspect there is a missing td/table.
Your outer xsl:for-each is doing select="document($first_report)/sg:SeagoingTrimReport/sg:weapons_payload".
So, if it selects anything, then it selects a node in a document whose outermost element is called sg:SeagoingTrimReport.
The next for-each does select="sg:weapon", so you are still in the same document.
The next for-each does select="/SeagoingTrimReportSummary/report". We know that the outermost element is called sg:SeagoingTrimReport, so /SeagoingTrimReportSummary can't possibly select anything.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference