Varkolak,
категории выводятся с помощью <ul> и <li>, соответственно нужно заменить на таблицы.
<!-- Отображение подгрупп данной группы -->
<ul>
<xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="groups"/>
</ul>
заменяем на
<!-- Отображение подгрупп данной группы -->
<table>
<tr>
<xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="groups"/>
</tr>
</table>
<xsl:template match="group" mode="groups">
<li>
<xsl:if test="small_image!=''">
<a href="{/document/blocks/url}{fullpath}" target="_blank"><img src="/upload/{small_image}"/></a> 
</xsl:if>
<a href="{/document/blocks/url}{fullpath}"><b><xsl:value-of disable-output-escaping="yes" select="name"/></b></a>
</li>
</xsl:template>
заменяем на
<xsl:template match="group" mode="groups">
<td>
<xsl:if test="small_image!=''">
<a href="{/document/blocks/url}{fullpath}" target="_blank"><img src="/upload/{small_image}"/></a> 
</xsl:if>
<a href="{/document/blocks/url}{fullpath}"><b><xsl:value-of disable-output-escaping="yes" select="name"/></b></a>
</td>
<!-- Переход на новую строку после каждой 2-й группы -->
<xsl:if test="position() mod 2 = 0">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
</xsl:if>
</xsl:template>
писАл без проверки кода, возможны опечатки.