There is no support for date/time arithmetic in XSLT 1.0; you need to do the calculation yourself - e.g:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Surgery">
<!-- calculate the duration in minutes -->
<xsl:variable name="duration" select="60 * substring-before(SURGERY_STOP_TIME, ':') + substring-after(SURGERY_STOP_TIME, ':') - 60 * substring-before(SURGERY_START_TIME, ':') - substring-after(SURGERY_START_TIME, ':')" />
<xsl:copy>
<xsl:copy-of select="*"/>
<DURATION>
<!-- output whole hours -->
<xsl:value-of select="floor($duration div 60)"/>
<xsl:text>h </xsl:text>
<!-- output remaining minutes -->
<xsl:value-of select="$duration mod 60"/>
<xsl:text>m</xsl:text>
</DURATION>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Applied to your input example, the result will be:
<?xml version="1.0" encoding="UTF-8"?>
<Surgery>
<SURGERY_START_TIME>9:02</SURGERY_START_TIME>
<SURGERY_STOP_TIME>11:45</SURGERY_STOP_TIME>
<DURATION>2h 43m</DURATION>
</Surgery>
and not 2h 52m
as stated in your question.