Hi HoldmyKidney,
returning your brain-cpu time spent for me... :-)
Speak after me: "I will use looping in XSLT only as last resort, long live the set theory".

To overcome your problem you need to check result-sets rather than looping. It is quite a stretch getting started with XLST when you come from a programming background (I feel the pain daily ;)).
So try this:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Collection">
<Results>
<xsl:apply-templates/>
</Results>
</xsl:template>
<xsl:template match="Item">
<xsl:variable name="prevNames" select="count(preceding-sibling::*[Name=current()/Name])"/>
<xsl:variable name="nextNames" select="count(following-sibling::*[Name=current()/Name])"/>
<xsl:if test="$nextNames>0 and $prevNames=0">
<Error>
Duplicate Entry found: <xsl:value-of select="Name"/>
</Error>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
... it might be slow on BIG datasets....
;) stw
If you think education is expensive - try ignorance!