The team have been working for some time to address an issue with
\bool_if:n(TF), namely that under some circumstances lazy evaluation can
lead to serious bugs. This is a consequence of working expandably and
cannot be avoided with lazy evaluation.
In the latest CTAN update, \bool_if:n(TF) has been made *greedy*:
\bool_lazy_... functions are available for lazy evaluation. (The latter
have a different input syntax which does not suffer from the issue that
affects \bool_if:n(TF).) Any code which still assumes lazy evaluation
for \bool_if:n(TF) will therefore need adjustment.