I think after an overlap condition like that you use pick nth instance to pick one or the other. An instance won't overlap itself, you can test this by setting it's opacity to 50 or something to visualize it.
Another approach I've used is to have a seperate detector object, which you can set to the position of one object and then detect the other ones.
For comparing angles and such you can pick one instance, save it's iid to a variable then pick all and do the comparison from there.
Or you can just follow a pattern like this:
+---------------------------------------------------------------------+
| for "a" from 0 to sprite.count-1 |
| for "b" from loopindex+1 to sprite.count-1 |
| compare sprite(loopindex("a")).angle = sprite(loopindex("b")).angle |
+---------------------------------------------------------------------+
+------------------------------------------------------------------+
| pick sprite instance loopindex("a") |
+------------------------------------------------------------------+
+------------------------------------------------------------------+
| pick sprite instance loopindex("b") |
+------------------------------------------------------------------+[/code:x9i4nh5x]Or some simplification to that effect.
There are other ways too, and basically it involves picking one, and saving values to variables then picking the other.