Your variable $maturDate1 is a node-set containing 5 element nodes.
In XSLT 1.0, when you apply the substring() function to a set of 5 nodes, it operates on the first of those nodes (2.0 would give you a type error instead).
I think you simply want:
Code:
<xsl:template match="maturity">
<xsl:variable name="maturYear" select="number(substring(.,1,4))+5"/>
<maturity>
<xsl:value-of select="concat($maturYear,substring(., 5, 4))"/>
</maturity>
</xsl:template>
The global variable isn't useful.
Note, your date arithmetic is capable of generating an invalid date like 20090229. Using the date/time arithmetic provided in XSLT 2.0 would be more sound.