1800 RPM (30 Hz) is slow for a microprocessor. My concern was that the the Arduino boot loader takes time and performs a lot of error checking. It's not a lot, but it can add up. If you are doing a lot of things with standard Arduino functions it might take more than 30 mS to complete the loop. I don't know if that's what's happening to you, but it could be.
You can check for this with some test code that logs the time at the beginning of the loop for a few cycles and either displays it or spits it out on a serial link.
If the code never misses a pulse then wheelrevs == xxx should work. If changing to >= fixes the problem then there is not much else it could be.