Don't decrement timeout by deltas between intervals that may be below the resolution of nanoTime(), use an absolute base and recalculate the timeout.
Based on input from other developers, we can be sure that currentTimeMillis() will never retrograde (at the resolution the housekeeper runs).