Using name()
inside your template will return 'headerType', the name of the node the template is applied too. That's why it is not working.
Why not just retrieve the node directly, like so:
<headerType>
<xsl:attribute name="status">
<xsl:value-of select="status"/>
</xsl:attribute>
<xsl:copy-of select="./*[local-name() != 'status']"/>
</headerType>
You can filter out that status node when applying templates to the other nodes inside <headerType>
I believe you can use the 'priority' attribute on your templates to define an order, but I have never used it before (never needed too, actually). This tutorial seems to discuss the order/precedence of the templates well. Or just Google it ;)