Abschließend nochmal der gesamte Code, falls mal jemand etwas ähnliches brauch oder die Geeks ihn tunen wollen 
// Anzahl Kreise
const int Kreise = 2;
// Angabe PIN-Belegung
const int irPin[] = {2, 3};
const int relPin[] = {5, 6};
const int buttonPin[] = {8, 9};
Na bitte! Du hast es mitgenommen.
delay(250);
um es hier wieder zu versauen!
NEIN!!! Kein delay() in produktiven Umgebungen!
Es wurde bereits erwähnt, die Anforderung zu ändern sehe ich ebenfalls kritisch - hier wurde im Einsatz festgestellt, das da was fehlt.
Auch wenn Software "lebt" heisst das nicht, das sowas jederzeit mal eben so "angepasst" werden kann.
Und Nein, BMA, Entrauchung, Türsteuerungen etc. beim BER sind kein Beispiel dafür das es geht.
Zurück zur Sachfrage:
Was mich irritiert, warum Du den ir-PIN sperren willst.
Das halte ich für unsinnig.
Dazu kommt, das Du Deine Bedingungen mehrfach benutzt. Das benötigt unnötige Rechenzeit und Du kannst nicht auschliessen, das sich zwischen if und else der Wert, von dem Du abhängig bist, ändert.
Nebenbei hast Du auch noch ein Problem im Setup mit der Initialisierung deiner Buttons.
Wenn Du auf LOW prüfen willst, musst Du dafür sorgen, das, wenn die Taste NICHT gedrückt ist ein HIGH-Pegel anliegt.
Das geht zum einen mit einem externen Widerstand von +5V nach PIN oder mit der Initialisierung des PULLUP im Chip selbst.
Wenn Du die externe Variante nicht hast, musst Du zwingend INPUT_PULLUP für
pinMode(buttonPin[i])
festlegen!
Und dann würde ich das, was bisher lief nicht anrühren.
Neue Bedingung? Neuer Ablauf!
Ich denk noch drüber nach, ob ich Dir einen Vorschlag mache.