I have to look at it again when I get home from work, but I don't see that you have accounted for RPM.
Unless there's more to it, the pulse width, which is what you're integrating on the meter, will be the same length for a low rpm with little advance as with higher rpm with more advance.
Looking at it comfortably from home . . . .
Let's plug in some realistic numbers:
Looking at 600rpm;
10 revolutions per second
Coil fires 4 times per revolution, or every 90*, or 40 times per second (however you want to look at it)
Time between subsequent coil fires, or 90* increments of rotation, is 1000ms/40 or 25 milliseconds (ms)
At 600 rpm, rotational speed is 3.6* per ms
At 1200 rpm it would be 7.2*/ms
At 2400 rpm - 14.4*/ms
At 3600 rpm - 21.6*/ms
With a speed of 600 rpm, assume you have an actual timing of 23.6*, so the coil fires then and the pulse lasts 1ms until it's killed by the trigger from the 20* infrared reflector sensor
Now let's look at a speed 2400 rpm . . . . actual timing at 34.4* . . . . . coil fires and triggers the pulse which lasts the same 1 ms until it's killed by the 20* infrared reflector sensor.
Looking at 3600 rpm, with a radical timing of 41.6* . . . . the coil fires and starts the pulse, which then gets killed by the 20* infrared reflector sensor in . . . you guessed it, the same 1 ms as in the previous examples.
Same pulse width, (which seems to be what you're measuring) for widely varying timings just because of the rpm involved . . .
Isn't the meter going to read the same for each of those examples?
Help me out here . . What did I miss?