O Linux foi projetado para responder a solicitações ARP em qualquer interface. Supõe-se que o host possua o endereço IP e não a interface específica. O que você está vendo é chamado ARP Flux.
Se suas interfaces existirem no mesmo Domínio de Broadcast da Camada 2, você verá isso. Você menciona que está usando VLANs, o que deve fazer com que isso não seja verdade, mas isso depende de onde a VLAN está sendo marcada (pelo SO ou switch, etc).
Você pode alterar esse comportamento no Linux usando o sysctl
arp_ignore - INTEGER
Define different modes for sending replies in response to received ARP requests that resolve local target IP addresses:
0 - (default): reply for any local target IP address, configured on any interface
1 - reply only if the target IP address is local address configured on the incoming interface
2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender's IP address are part from same subnet on this interface
3 - do not reply for local addresses configured with scope host, only resolutions for global and link addresses are replied
Editar: Depois de reler sua pergunta, parece que você pode precisar desabilitar o filtro de caminho inverso em cada NIC.
sysctl -w net.ipv4.conf.eth0/102.rp_filter=0
sysctl -w net.ipv4.conf.eth0/103.rp_filter=0