I can tell you why the presented code does not work as you expect.
The Picklist made in event 119 contains 1 object.
The 'for each' does not matter, picking wise. It does logical wise.
So, it iterates trough each member of the family. When that member of the family meets the two conditions. It picks that member. If not, the picklist for that family will be empty.
With 1 object in the picklist, the condition is true. It wil run its sub conditions.
With zero objects in the list, the condition is false, and wil not run its sub events.
So, if it runs its subevents, it has 1 object in the picklist, for the following subevents that is the 'previous picked list'.
Now. Event 120 starts from that 'previous picked list'. Containing 1 object.
It will not check those objects that are not in that picklist, they are excluded by event 119.
Hence. It can only check LOS between that 1 picked object and itself.