^/blog/([^/]+)/?(.*)?$
Вот зачем перед '$' стоит '?'?
/blog/category/$2?$1
нафига нужен '?$1'?
в конце слэша нет, тогда в этом случае nginx ни с того, ни сего делает redirect на
blog/category/name/?category=test
вообще должен делать внутренний rewrite на /blog/category/name?test, но видимо по этому адресу есть какой-то скрипт, который перенаправляет думая что test это категория
адрес же со слешем на конце добросовестнонаправляется в /blog/category/?test и /blog/category/name/?test, где данный урл прокатывает.