It appears you are still entering the subroute call mulitple times into the main gcode program. I've included some of my gcode so you can see where I'm at. I've also included the subroutine.
A portion of the gcode (I started with a canned drill cycle to give me a way to select the holes).
The goal is to enter a code one time near the beginning of the gcode similar to how a G81 would appear to get the subroutine to be called for each set of XY.
N01 G20 G40 G49 G54 G80 G90 G91.1
;N02 G53 Z0.
(JOB 1 HOLE RANDOM POINT PATTERN)
(FEATURE DRILL HOLE)
N21 T2 M6 (Tool 2, Tool Change)
N22 S1802 M03 (Spindle speed, rotate spindle)
N23 G00 G90 G54 X-31.5849 Y8.3424 A-10 (Rapid positioning, Absolute Positioning, Work Piece Coord Sys, Rotate A -10 degrees);N24 G43 H2 Z.1 (Tool Length comp, ,Coolant On)
N24 G0 X-31.5849 Y8.3424 (Go to first hole)
N25 M98 (hole10done.tap)
N26 G0 X-28.1169 Y7.0991
N27 M98 (hole10done.tap)
N28 G0 X-27.5498 Y11.8541
N29 M98 (hole10done.tap)
N30 G0 X-22.7075 Y8.8004
N31 M98 (hole10done.tap)
N32 G0 X-20.8535 Y13.6426
N33 M98 (hole10done.tap)
The subroutine...
G0 Z.2
G01 Z.1
G91
G1 X.07052 Z-.35
G1 X-.07052 Z.35
G90
G1 Z.2 F30
M99
DMF