Descobri da pior maneira que é sempre uma boa ideia remover caracteres vazios no início e fim de strings sempre que as formos comparar.
Depois de um bom pedaço sem perceber porque duas string identicas não estavam a retornar como tal numa comparação, finalmente descobri um espaço vazio numa das strings.
Para preservar a minha saúde mental, no futuro vou sempre remover caracteres vazios no início e fim de strings antes de as comparar.
<xsl:if test="normalize-space($DisplayTitle) != normalize-space($SafeLinkUrl)">
<label>
<xsl:value-of select="$DisplayTitle"/>
</label>
</xsl:if>