State values can only be written once per sample-block in the BCPy2000 framework. A "collision" in a state means that an attempt has been made to write to the state more than once per sample-block, with the result that the first value (524 in your example) will be overwritten by 528 in the .dat file.
The EventOffset state is set automatically by the framework whenever a phase transition occurs (see
http://bci2000.org/downloads/BCPy2000/P ... chine.html ).
Therefore, my interpretation is that two phase transitions are happening, the second occurring too fast after the first for the framework to be able to record both in the file.
The first two reasons I can think of are: (1) the phase duration, defined in your Phases() method and/or cut short by an explicit call to self.change_phase(), really is too short, or (2) sample-blocks are being delivered very late or unevenly (check the VisualizeTiming window).