Existem dois problemas aqui:
- Você não está removendo o endereço do e-mail, então, quando você adiciona um segundo, o primeiro ainda está lá e ambos verão o outro endereço.
- Você está usando um
header
redirecione em seu loop sem encerrar seu script. Isso pode fazer com que o código seja executado após o redirecionamento, mas não há garantia de quanto e por quanto tempo.
O primeiro problema que você pode resolver limpando os destinatários no final do loop:
$mail->ClearAllRecipients();
Quanto ao segundo problema, você não deve redirecionar para nenhum lugar dentro do loop e quando redirecionar após todas as mensagens terem sido enviadas, você deve sair do seu scipt usando
exit;
para que nada seja executado depois disso.