Aside from the obvious usefulness of having just a function to act as a conditional in your code, I believe the only difference worth noting is that the events occur at set times during the step, known as the event order. If you have very complex code that is organised into different stages throughout the step, this can matter.
The documentation is quite lacking so here are the results of some research. Each event runs for each instance in the order of the resource tree before moving on to the next event. The exception to this are Alarms, (which are explained below), movement and collision (which seem to be intertwined), and the draw events, which follow the order of highest(+) depth to lowest(-) depth instead of resource tree order (yes, this is really how depth w