I suppose that you with 'bug' refer to the bug that you created. Lets walk trough the events.
Events 2 sets the instance variable 'trigger' for all sprites to "trigger1" when that trigger is touched.
Events 4 sets the instance variable 'trigger' for all sprites to "trigger2" when that trigger is touched.
So far ok, and i expect intended.
Event 6 picks all sprites with instance variable 'trigger' set to "trigger1".
And due event 2, that are ALWAYS ALL sprites.
Now in event 7, you say: set sp to Sprite.X>100. That returns 1 or 0. Which is fine.
But you dont refine the picklist. So to which of all the picked sprites should Sprite.X refer to ?
Since you have a list of sprites, and you address only one of them, it usually picks the oldest sprite, but in reality this picking is rather arbitrary.
So in your case, this 'Sprite.X' refers to the sprite with index zero in the picklist, and that sprite sits at x=50.
The logical expression will therefor ALWAYS return zero, and as a consequence sp is ALWAYS zero.
The 'trigger once' works as expected.
The browser log has the same problem. All sprites are picked, which sprite should it log ?
The for each in event 2 and 4 are not needed. The Sprites are not picked. That makes them un-referenced, and that is the same as a 'pick all'. They get no personal values, so you can set the instance variable 'trigger' for all in one action, without the 'for each' loop.