Zach's correct...forgot about the TYPEINFO.events specific shortcut.
If it does hit more than once, use the RecrusionControl class. You call it with a key of some sorts (try to make it unique to that execution chain, like the task name+the date + hour). First time it's called, the "Continue" is true, next time it's false
if(CMS.Base.RecursionControl("SomeKey", false).Continue)
Learned that trick a while back.