Generally, clearing interrupt source flags from C code is dangerous, it is very easy to get unintended side effects. I strong encourage the practice of always disassembling such code to see what it actually does behind the lines. That will save you from many dangerous, hard-to-find bugs.
For this specific case: when setting timer flags with plain, portable bit-wise operators, you will typically get a problem in CW if you write something like:
REG |= 0x01;
This results in a read-modify-write sequence, that destroys all adjacent flags. The work-around is to write REG = 0x01 instead, which results in a bit set instruction.
Whether the bit field write in your code results in read-modify-write or bit set, I don't know. Whether accessing a bit in a bit field destroys adjacent bits in the same register, I don't know either. The only way to know how they work is to read the compiler docs in detail.
This is the fun thing with bit fields: the C standard guarantees that bit fields are implemented in completely inpredictable ways, and a programmer can never tell what a bit field access actually does between the lines from reading the C code - the behavior isn't specified by the standard.