In your first template, you have an xsl:apply-templates
<xsl:apply-templates select="homepage-updates/entry" mode="updates"/>
You also has the template that matches this
<xsl:template match="entry" mode="updates">
So far, so good. But within this "entry" template, you then do this
<xsl:for-each select="entry[@handle = updates]">
This is looking for an entry element that is a child of the current entry element you are matching, or which there are none in your XML.
Try changing the template match to match the parent element instead:
<xsl:template match="homepage-updates" mode="updates">
And then change the xsl:apply-templates accordingly
<xsl:apply-templates select="homepage-updates" mode="updates"/>