Well, depending on precisely what you're doing, you may be able to factor out the common stuff into a separate named template:
<xsl:template match="assessment">
<xsl:call-template name="commonBit" />
<!-- stuff specific to assessments -->
</xsl:template>
<xsl:template match="section">
<xsl:call-template name="commonBit" />
<!-- stuff specific to sections -->
</xsl:template>
<xsl:template name="commonBit">
<!-- stuff common to both assessments and sections -->
</xsl:template>
Obviously, the call-template element can go anywhere in the assessment/section templates; the context node is the same while processing the 'commonBit' template as it was when you process the assessment/section templates.