It could very well be that they cannot reliably prove those flags are unused in enough cases to optimise out their (expensive) calculation.
“This almost entirely prevents inter-instruction optimisations. There are two known exceptions. The first is an “unused-flags” optimisation, which avoids calculating x86 flags value if they are not used before being overwritten on every path from a flag-setting instruction.”
Does this mean the emulator is buggy (if I write a loop that sets and clears flags, but doesn’t do anything with them, an interrupt handler that samples the flag values would need to see both values), but in a way that no sane code would notice?
It does have to emulate signals but its moderately easy to handle those by deferring them to "safe" points where all architectural state is known