There's clearly something wrong with this expression
<xsl:value-of select="$Category[$rowPID = $rowID]"/>
because the value of the predicate doesn't depend on the context node.
But I can't see how you get your current output. There are six <row> elements in the input, so I would expect six <tr> elements in the output.
I would do something like this:
<xsl:key name="k" match="searchfields/row" use="intPrimaryKeyID"/>
then
<xsl:for-each select="/root/data/row">
<tr>
<td>
<a href="default.aspx?pageid=176&id={@intID}"/>
<xsl:value-of select="@strTitle"/>
</a>
</td>
<td>
<xsl:value-of select="key('k', @intId)/@strSearchValue"/>
</td>
</tr>
</xsl:for-each>
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference