Why does this not work? When it runs only the first value in the call is observed, so every 2.5 seconds it validates TRUE instead of something random between 2.5 and 10 seconcds.
That's because you create a new random value between 2500 and 10000 for randPulse on each iteration of the loop() method.
Once you've crossed the 2500 millisecond threshold, chances are very good that one of the next few thousand random() calls within the next few milliseconds will produce 2500 or something close to it, causing your if block to be executed.
Set randPulseinside the if block, not every time loop() executes.