Hi,
Sorry you're having so much trouble. I wonder if attaching and detaching the interrupts is the culprit. It might be disrupting other things that depend on interrupts, like the ethernet card. You might refactor your code a bit to use noInterrupts(), copy out the value of pulseCounter,reset it, turn on interrupts again using interrupts(), and then do the calculations, serial stuff, and the write to ThingSpeak. Presumably, there's no risk of having more than 255 gallons of water used in 20 seconds, right?
// Disable interrupts while reseting pulse count
noInterrupts();
pulseCountCopy = pulseCount;
pulseCount = 0;
// Enable interrupts again
interrupts();
//calculate
oldTime = millis();
gallons = (gallons + pulseCountCopy );
// Prints gallon flow and Total
Serial.print("Pulse: ");
Serial.print(pulseCountCopy );
Serial.print(" Gallons: ");
Serial.println(gallons);
pulseCount = 0;