Hello,
Since the low byte must be already zero for the high byte to decrement, you might try first loading a dummy value with non-zero low byte, and then immediately load the required value. But this shouldn't be necessary if interrupts are actually being disabled prior to the write. Perhaps this might be a problem with the compiler. Is it possible to view the assembly code that the compiler is generating?
Data coherency should not be an issue if the word value is written with a single assembly instruction, i.e.
ldhx #0x012C
sthx xvar
Perhaps you should do some further tests by creating a very simple CW project, and see if the problem still persists. If it does, you can then open a Service Request with Freescale.
Regards,
Mac