Noch was zur Interruptabarbeitung bei den AVR Controllern.

Bei jedem Interrupt wird ein Flag gesetzt.
Läuft gerade ein Interrupt und ein anderer wird ausgelöst läuft der erste bis zum Ende durch und dann wird sofort der andere abgearbeitet.

Die einzige Möglichkeit, das ein Interrupt komplett "verschluckt" wird ist, das während der Interruptabarbeitung genau die selbe Interruptinstanz noch mal angesprochen wird.
Ausserdem kann man anstehende Interrupts durch schreiben in das entsprechende Interruptflag Bit bewusst löschen.
Das wird manchmal vor der Freigabe der globalen Interrupts ( asm : SEI ) gemacht um definierte Zustände bei z.B. des USART zu haben.

Bei einem mechanischen Drehencoder solltest Du auch die Entprellung der Kontakte an den entsprechenden Controllereingängen berücksichtigen.
Darum ist die Idee mit der zyklischen Abfrage in einem Timer Interrupt nicht so ganz verkehrt.