Às vezes não sou o pensador mais abrangente. ARPs estão funcionando bem, isso significa que a camada 2 é boa. O que você testa depois da camada 2? Bem, camada 3, claro. Os hosts na rede física não tinham rota de volta para os convidados.
Como o host está efetivamente funcionando como um roteador para os convidados, qualquer tráfego ip seria enviado do convidado sem nenhum problema, mas nunca receberia uma resposta, pois o destinatário não teria uma rota para esse IP através do host.
Eu adicionei uma rede estática à minha máquina de teste na rede física para o IP de meus convidados com um gateway do host e os pings começaram a funcionar bem.
A solução é simplesmente colocar os convidados em uma rede de camada 2 separada e, em seguida, fazer com que o roteador na minha rede física tenha uma rota para a rede do convidado por meio do host. Isso resolverá meu problema.
A seguinte documentação do libvirt descreve as opções para redes KVM relativamente bem. As únicas exceções, não documentadas aqui, seriam usar o Cisco Nexus 1000v ou o Open vSwitch.