Soweit Ich den Code verstanden habe benutzt er ja den ICP Interrupt für die Drehzahlmessung.
Das sollte im Prinzip auch gut funktionieren und auch relativ unabhängig vom Auslesezeitpunkt sein.
Ich vermute hier eher einen Fehler auf der Hardwareseite.
Es kommen da evtl. unerwünschte Impulse durch.
Bei so Magnetzündungen hab Ich auch schon mal einen unidirektionalen Hallsensor verbaut.
Der liefert ein sehr gutes Rechtecksignal?!

Die Mittelung der Werte kann man auch über einen Ringpuffer machen.

Ein Zeiger erhält den Wert 0...4 bei jedem neuen Messwert inkrementierend.
Jeder Messwert wird dann in das Array geschrieben, an den Platz auf den der Zeiger zeigt.
Bei der Auswertung werden dann alle 5 Werte zusammengezählt und durch 5 geteilt.

Nimmt man für das Array 2^n Werte gehts auch mit ner Schiebeoperation dann noch schneller.