To answer some questions:
1. The loop is working
2. The pathing does not occur in every tick. There are conditions carefully placed to ensure pathing only occurs when needed. The only exception is when a ranged unit is retreating, but the CPU usage is still heavily used when units are not near each other, and only the first half dozen lines of code run. This is because each of the 4 factions can have 120 combat units at a time, which means the loop could run 480 times 10 times per second which taxes the CPU even if every unit is sorted out within the first 6 conditions.
3. The different families are in place because the sprites are used by both factions. Therefore, if Unit A attacks Unit B, Both would be referenced in the same family, requiring local variables to be used to ID 2 entities using the same family. Instead, I have 2 separate families so both parties can be easily identified.
The scale of the game is pretty large. I asked about the feasibility of multi-player for a game of this size in another thread and was told it would likely be impossible to keep 800 sprites updated in real time. I eventually want to move out of Construct 3, as I want the game to be 3D eventually, and I keep getting the feeling the engine was not designed to run an RTS game.
I will try the spirtes idea and update back.