Eu entendi!
RewriteBase estava faltando. Eventhough não é obrigatório na configuração do primeiro domínio, é no segundo caso!
Eu também consegui fazer funcionar para qualquer host virtual movendo a configuração do diretório "api" no nível do servidor. Dá:
# API Accessible from all domains
Alias /api /website/www/api
<Directory "/website/www/api">
Options FollowSymLinks
AllowOverride None
Satisfy Any
Allow from all
RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_URI} !dispatch\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ dispatch.php [L,QSA]
</Directory>
# Virtual hosts
<VirtualHost *:80>
ServerName www.domain.com
DocumentRoot /website/www
<Directory "/website/www">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName res.domain.com
DocumentRoot /website/res
<Directory "/website/res">
Options FollowSymLinks
AllowOverride All
AuthType Basic
AuthUserFile /website/res/users.sec
<Limit GET POST>
Require valid-user
</Limit>
</Directory>
</VirtualHost>
Obrigado @mindthemonkey pelo acionador;)