Bidirectional rule creates a loop

Sure, there are timing functions for rules.
You might use a shared global variable to hold a handle for a timer. then when when you send a command start the timer. At the expiry time, timer nulls itself.
The rules should check to see if the timer is running before taking action.

General timer usage

Note, this will immediately block the kind of repeated commands you might expect from dragging a slider, and you might instead want a two-stage timer that for a period still allows commands but then blocks them for a second period.