In the tactic files, BeginHoldState will do a move (not attackmove) if further than 60 away from the destination. This very often leads to units moving to hold a position, and actually being in range of the enemy units they're supposed to be fighting, but just running past them while getting gunned down, instead of just fighting them immediatedly. A check to see if enemies in range are in range of the destination, and if they are then do an attack move instead, might be the solution.
This issue becomes even worse when you take into account that the logic deciding on chokepoints to defend and such continously flips back and forth, so the units always finds themselves moving back and forth between points they'll never get close to.
Perhaps this is a silly question, but why not change the offending DoMove from HoldState to AttackState?