It's always useful with this kind of question if you can show your best attempt, because that makes it possible to see where your misunderstandings of the spec arose.
You've stated the rules very clearly and they translate very directly into XSLT template rules. They don't even need 2.0 facilities, though I've used them where appropriate.
1. Put a comma at end of <Clothing> only if the <Color> of next <Clothing> is the same.
<xsl:template match="Clothing">
<xsl:value-of select="."/>
<xsl:if test="../Color = ../following-sibling::Box[1]/Color">,</xsl:if>
</xsl:template>
2. If <Color> has blank value, then the <Color> is the same as the <Color> of the previous <Clothing>.
I'm not sure if this rule should be applied before Rule 1, or if it only affects Rule 3. But in 2.0, try
<xsl:function name="f:color" as="xs:string">
<xsl:param name="box" as="xs:element(Box)"/>
<xsl:sequence select="if ($box/Color eq '') then $box/preceding-sibling::Box[1]/Color else $box/Color"/>
</xsl:function>
and then use f:color(box) in place of box/Color where appropriate
3. If <Color> has the same value as previous <Color>, then don't output that <Color> value.
<xsl:template match="Color">
<xsl:if test="not(f:folor(..) = f:color(../preceding-sibling::Box[1])">
<xsl:value-of select="f:color(..)"/>
4. End with a period (.).
<xsl:template match="Warehouse">
<xsl:apply-templates/>
<xsl:text>.</xsl:text>
</xsl:template>
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference