Why does this rule not seem to work?

I turn on the fan, then I want it to wait until the humidity falls below the captured value - 2 or 30 minutes. Is that not the function of the TIMEOUT? I assumed it was to timeout the wait condition if it was not met.

The fan gets turned on but as you can see there the current humidity of 64 is less than 68-2 so I'd expect the fan to get turned off. What am I missing here?

The odd thing is right as I first posted this the fan did go off BUT the "Master Bath Virtual Fan" still shows as on. (Can't wait for the ZEN30 driver to get fixed for the Fan switch).

It sounds like your understanding is correct. What you might be missing is the behavior of a "Wait" in general. If any trigger matches, your "Actions" will start from the beginning as usual, but any in-progress "Wait" will be cancelled (this is in contrast to a "Delay," which must be specifically cancelled). While you didn't post your trigger here, my guess is that this is what is happening. I suppose the other possibility is whatever oddity there is with the ZEN30, but I don't have one of those and am not familiar with whatever driver problems might exist at the moment.

If a "Wait" is in progress, you'll see a relevant "Event Subscription" on the app status (gear/cogs icon) page for that rule. With a timeout added, you'd additionally see a "Scheduled Job" for that time. If they get cancelled, you won't see those specific ones anymore but may see others (e.g., definitely subscriptions or schedules related to your triggers). What's on this page doesn't always make a ton of sense to someone who isn't the developer, but for a small rule like this you can probably still make some good guesses using this knowledge if you're curious to know whether the "Wait" is still happening.

The trigger is an increase in humidity. So it could trigger multiple times while running and while I thought my IF statement would be okay I think I now see what needs to be done. Thanks for the reply I think you have me on the right track.