Firstly, it doesn't make sense to have two template rules that both say match="field". (Or match="data"). This is an error, though processors are allowed to ignore it and simply ignore the first rule.
Secondly, this is nonsense unless you have fields-within-fields-within-fields:
<xsl:template match="field">
<fields>
<xsl:for-each select="field">
<xsl:apply-templates select="field"/>
Your template matches a field, the for-each then selects its children called field, and for each of these children the apply-templates processes the grandchildren called field...
Finally, to get from a field to a data element, you can't simply use
<xsl:apply-templates select="data"/>
That expects the data to be a child of the field. You need
<xsl:apply-templates select="/root/data[name=current()/name]"/>
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference