A good troubleshooting step would be to put an IP phone on the same subnet as Unity, with the same CSS. Place a call down the pri at the remote site through to this phone. Now manually attempt the same transfer, using the transfer key on the IP phone. If this also fails, then someone more familiar with gateway configs than I will need to help you.
If the manual transfer works then we'll need to figure out what is different between Unity and your test phone. Off hand, the only thing I can think of is that Unity dials much faster than the typical human. I've seen some cases where transfering across a gateway required a pause before releasing the transfer. This can be done by adding a comma at the end of the transfer dialstring (on the transfer page of the Call Handler or Subscriber). If this is the case, you might also try using supervised transfers rather than release transfers.
Cheers,
Eric