O ServerName não deve incluir o número da porta. No seu exemplo, basta torná-lo "domain.com" para cada VirtualHost. As diretivas ServerName não precisam ser exclusivas na sua situação em que você tem cada VirtualHost em uma porta diferente. Você também não precisa do NameVirtualHost porque está realizando hospedagem virtual por porta (embora não seja prejudicial incluir).
Como uma etapa de solução de problemas, certifique-se de que o IPTables esteja totalmente desativado (supondo que este seja o Linux) e verifique isso fazendo "iptables -L -n -v"; procure por cada tabela para estar vazia. Você também pode verificar se o SELinux está desativado; veja a documentação da sua distro para saber como fazer isso corretamente, pois o procedimento varia. Se qualquer um deles for o problema, você pode optar por mantê-los desativados ou configurá-los corretamente para permitir que o Apache ouça essas portas.
Aqui está um exemplo da documentação do Apache 2.2 sobre hospedagem virtual baseada em porta:
link