Not sure if the schema based approach is something that would work, but basically your template is not matching, so everything is going through the identity template.
The following gives the correct output.
Code:
<xsl:template match="Languages">
<xsl:copy>
<xsl:apply-templates select="*[Proficiency='Native']"/>
<xsl:apply-templates select="*[Proficiency='Business']"/>
<xsl:apply-templates select="*[Proficiency='Conversational']"/>
<xsl:apply-templates select="*[Proficiency='Data Migration']"/>
</xsl:copy>
</xsl:template>
You could change Proficiency to * to match on any child node irrespective of name.