If you run the code with IE then MSXML is used as the XSLT processor and that would simply throw an error on exsl:node-set I think, unless you fix it with an msxsl: script as follows:
Code:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="exsl msxsl"
version="1.0">
<xsl:output method="html" indent="yes"/>
<msxsl:script language="JScript" implements-prefix="exsl">
this['node-set'] = function(node) { return node; }
</msxsl:script>
<xsl:key name="k1" match="Item" use="Account"/>
<xsl:template match="Items">
<table>
<thead>
<tr>
<th>Account</th>
<th>currentConsumption</th>
<th>Previous Consumption</th>
<th>percent Change</th>
<th>Rank</th>
</tr>
</thead>
<tbody>
<xsl:variable name="latest">
<xsl:for-each select="Item[generate-id() = generate-id(key('k1', Account)[1])]">
<xsl:for-each select="key('k1', Account)">
<xsl:sort select="substring-after(substring-after(BillDate, '/'), '/')" data-type="number" order="descending"/>
<xsl:sort select="substring-before(BillDate, '/')" data-type="number" order="descending"/>
<xsl:sort select="substring-before(substring-after(BillDate, '/'), '/')" data-type="number" order="descending"/>
<xsl:if test="position() = 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="exsl:node-set($latest)/Item">
<xsl:sort select="PercentChange" data-type="number" order="ascending"/>
<tr>
<xsl:apply-templates select="Account | currentConsumption | PreviousMonthConsumption | PercentChange"/>
<td><xsl:value-of select="position()"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
<xsl:template match="Item/*">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
When I do that I have no problems here with IE (IE 8) to run the transformation.
Why you would get that strange output I have no idea but I am not sure I understand what you are doing exactly as you provided some HTML markup result code which is rather difficult to get at when the transformation is run directly in the browser.