Wasserfluss per ISR ermitteln > Loopdauer

Das ist auch Mist.
Prinzipiell müsste es detachInterrupt(digitalPinToInterrupt(WATERFLOWPIN)); heißen. Ausserdem stellst du so sicher, dass Interrupts verloren gehen.

Richtig wäre, sich die Impulse zu merken und den Zähler zurückzusetzen, während Interrupts geschlossen sind, dann beliebig langsam mit der gemerkten Zahl weiterarbeiten.

const float ppl=5.85; // Pulse pro Liter
const uint16_t intervall = 1000; // einmal je Sekunde
...
void loop () {
 if (millis() - oldTime >= intervall)  {
  noInterrupts();
  byte pulsesTemp = waterPulseCount; 
  waterPulseCount = 0;
  interrupts();
  flowRate = pulsesTemp / ppl * 60000 / (millis() - oldTime); // liter pro minute  
  oldTime += intervall;  
  // ... alles was noch einmal je Sekunde (oder seltener) zu machen ist
 }
}

Vermutlich ist die Anzahl Pulse je Intervall ( hier 1 sec ) deutlich unter 255. Dumm ist's nur, wenn waterPulseCount je Sekunde zwischen 0 und 1 hin und her springt. Dann sollte man intervall erhöhen, um eine einigermaßen ruhige flowRate zu erhalten.