Encontrei a solução depois de pesquisar um pouco mais. Graças a uma resposta do Yash neste painel. Segundo ele, o problema é que a diretiva proxypass tem prioridade sobre a diretiva auth e envia o .php para o proxy antes que as credenciais sejam necessárias. A correção é setHandler em uma diretiva filesMatch. Isso funcionou como esperado. (note que alterei a diretiva directorymatch para - mas isso é irrelevante para a questão central).
<DirectoryMatch "/var/www/html/(admin|.+test)">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</DirectoryMatch>
<Proxy "fcgi://localhost:9000/" enablereuse=on max=10>
</Proxy>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>