RPM with other inputs

TimFr:

  SeedState = digitalRead(LowSeedPin);     

// read the state of seed level:

if (SeedState == HIGH) {      
   // if seed low switch on the SeedState is HIGH:
     
   Serial.println("*******LOW SEED ");
   SeedState = 0;
 }

What's this code intended to achieve? Doesn't it produce an huge amount of serial output? That may be slowing your sketch down to the point that you get rpmcount > 20, which would screw your calculations up. Why don't you calculate based on the actual revolution count, not assume the count is 20?

By the way, rpmcount is a poor choice of name since it does not hold or count 'rpms'.