Warning - speculation follows.
It's not ICM's fault. In your routing script you return a label, which is attached to a routing client. It's the job of the peripheral and the peripheral routing client to handle the label. ICM's task is over.
In your case, the routing client is CUCM, so it has to do what's necessary.
If the label is a pattern that matches a trunk to the gateway controlled by a gatekeeper, you should be able to make it hit a dial peer on the gateway and follow the same path as the call forward.
Regards,
Geoff