That is expected - unlike in the queue receive functions, which have an
outer loop to keep re-testing, there is nothing in the
xEventGroupWaitBits() function that will re-test the block condition
when the task blocked task leaves the blocked state.
If the task that is waiting for event bits is also being suspended and
resumed then you could check the time before calling
xEventGroupWaitBits(), and then if the function returns without any bits
being set, check the time again to know if the function returned because
of a timeout. If the requested block time has not expired, and no bits
are set, then you could assume the function returned because the task
got suspended and then resumed again.