Primeiro de tudo: nunca teste em ambiente de produção coisas como esta. Instale um servidor de teste e faça uma solicitação HTTP lá e procure o log. Você deve ser capaz de identificar facilmente informações específicas para essa solicitação.
Estes dados de depuração são muito úteis na solução de problemas relacionados aos loops de resolução do mod_rewrite. Basicamente, ele registra todas as etapas e imprime a resolução.
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]
Esta é provavelmente a regra que você deseja para este caso. Em vez disso, a análise é interrompida para a segunda regra:
RewriteRule ^battery/([^/]+)$ /browser/product?sku=BATTERY+$1&type=battery
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)/product([0-9]+)$ /browser/index.php?make=$1&model=$2&id=$3&%{QUERY_STRING} [L,NC]
Desde que tenha [L], última entrada. A substituição vai parar por aí. RewriteRules não se importa se o URL não corresponde.
Em vez disso, use RewriteConds para fazer a correspondência. Se eles corresponderem, a regra será usada e, caso contrário, a execução continuará após a regra.
Então, algo como
RewriteCond %{REQUEST_URI} ^vehicles/([^/]+)/([^/]+)/([^/]+)$
RewriteRule ^vehicles/([^/]+)/([^/]+)/([^/]+)$ /store/product/list.php?make=$1&model=$2&year=$3&%{QUERY_STRING} [L,NC]
Você também pode usar parâmetros definidos em RewriteCond, se quiser regras mais limpas, com% 1.