You're supposed to use cancelEvents, and it especially cancels delayed events. The only way it would still be happening is if you are either trying to cancelEvents on bricks other than the one doing them, or you have it set where it reactivates anyway.
Try putting the cancel before it...
X 0ms onPlayerTouch Self cancelEventsX 0ms onPlayerTouch Self setColor 0.898039 0.000000 0.000000 1.000000X 500ms onPlayerTouch Self setColor 1.000000 1.000000 1.000000 1.000000