El problema es que tus reglas se están cumpliendo todas. Por lo tanto, la reescritura resultante de la primera también pasa por la demás reglas. En este caso el problema se soluciona indicándole al servidor Apache que ya no se desea ejecutar más comprobaciones usando [L]:
Código:
#2 variables
Rewriterule ^(.*)/(.*)/$ index.php?categoria=$1&subcategoria=$2 [L]
#1 variable
Rewriterule ^(.*)/$ index.php?categoria=$1 [L]
Lee más sobre el modrewrite aquí:
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html