Grouping is done by Munchian Grouping in line 4 and 19, the total is calculated with the XPath sum function in line 13.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:udt="DotNetNuke/UserDefinedTable" exclude-result-prefixes="udt">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:key name="data-by-player" match="udt:Data" use="udt:Player" />
<xsl:template match="udt:Data" mode="list">
<tr class="Normal">
<td>
<xsl:value-of select="udt:Player" disable-output-escaping="yes" />
</td>
<td>
<xsl:variable name="player" select="udt:Player" />
<xsl:value-of select="sum(//udt:Data[udt:Player=$player]/udt:Points)" disable-output-escaping="yes" />
</td>
</tr>
</xsl:template>
<xsl:template match="/udt:UserDefinedTable">
<xsl:variable name="currentData" select="udt:Data[count(. | key('data-by-player', udt:Player)[1]) = 1]" />
<xsl:if test="$currentData">
<table>
<tr>
<th>Player</th>
<th>Sum of Points</th>
</tr>
<xsl:apply-templates select="$currentData" mode="list">
</xsl:apply-templates>
</table>
</xsl:if>
</xsl:template>
</xsl:stylesheet>