Well, we all make mistakes: when I said match="SECTION" I meant from="SECTION", as Martin pointed out.
But this is complete garbage:
<xsl:when test="//SECTION_1 | //SECTION_2 | //SECTION_3">
It's saying "if there is a SECTION_1 or a SECTION_2 or a SECTION_3 anywhere in my document, then number the table, otherwise don't bother".
And with match="node()::table" you've not only repeated my error of getting the attribute name wrong, but you've now invented an axis called node()!
If by "top-level element" you mean a child of the document element, then you can use
<xsl:number level="any" from="/*/*"/>
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference