Nah, same issue can happen depending on the arrangement of the overlapping and order they are checked. I've already got the equivalent by disabling collision immediately.
The solution is to keep track of and destroy the instance with the most number of overlapping instances on each iteration. In my previous example, A and C have 1 overlap, and B has 2, which means B should be the one to be destroyed given a choice.
However, there's no way to get that count without using the old object -> compare with family trick as far as I can tell, by using system instance picking only. When using for each (because we want to count how many are overlapping each individual instance), to get the other instances, picking needs to be reset with pick all, and upon picking all, the isolation of the instance we are trying to check is lost.