Se non sbaglio nei primi codici l'interrupt era impostato sul solo fronte di salita, negli ultimi sulla variazione, con il secondo metodo si conta esattamente il doppio a parità di movimento.
Il mio codice (primo sketch) è solo una versione compatta della logica che hai postato.
Se si sente la variazione non serve la variabile lettura precedente. Quando c'è una variazione si controlla se il secondo ingresso è uguale al primo. Il risultato booleano del confronto lo metto nella variabile clwise (senso orario), che vale 1 per senso orario altrimenti 0. Il resto è solo un barbatrucco per sommare o sottrarre 1 dalla variabile conteggio, che ha la stessa funzione dalla tua espressione ternaria.
Nello sketch successivo uso la variabile first per quanto detto alla fine di uno dei post precedenti. Per calcolare il tempo servono almeno due impulsi, e se si stava girando al contrario il primo va solo salvato per il calcolo con quello successivo.