What you describe sounds exactly like chattering. The case you really need to watch out for is a case where the system dynamics on one side of an event drive it toward the event. In other words, if x>c, der(x) <= 0 and if x<=c, der(x) >= 0. Another case is if such an event occurs at an equilibrium point.
You say "what kind of thing may cause this", but it seems to me (at least from what I can understand of your description) that the answer is obvious. It is your error block. You say it "is only a simple minus calculation", but if there any kind of conditional expression in the block (which I assume there is), then an event will be triggered.
My guess, from your description, is that your system is coming to an equilibrium point at exactly the point where the condition statement transitions from true to false. As such, numerical noise in the solution at that point is cause it to cross back and forth across that threshhold triggering an event each time.