La ligne mfrc522[i].PCD_Init(); exécutée à chaque itération de la boucle for me parait inutile.
J'ai regardé le programme d'exemple ReadUidMultiReader qui est installé avec la librairie.
Les lecteurs ne sont pas réinitialisés systématiquement mais uniquement dans setup().
La logique de lecture des tags me parait un peu foireuse.
Si la lecture du tag ne fonctionne pas tu continues quand même à dérouler la suite du code ce qui me parait étonnant et pourrait expliquer le fonctionnement erratique.
Un conseil, passer le débit de la ligne série à 115200 bauds au lieu de 9600.