Clean jobs is set to true when the pool sends new work because of new network block found. If only merkle root hash was updated, then clean jobs is false. Also, it is always set to true when sending first work for a new coin job after coin change.
Is that OK or do you think it should work differently?
Nope, that seems correct! I'll tinker a bit more with queue sizes, since it should be flushing upon receiving clean jobs -- meaning queue size should be irrelevant too, for rejects.