Is there a reason that you cannot use waypoints to accomplish this? It might be easier.
In any case, I'm guessing that your Hero and Hero2 units are player-controlled. If so, you don't need to make them join Rescue1, and you do not need to use the assignAsCargo and orderGetIn commands since the players will be doing that on their own. These are just ideas to cut out excess in your script.
Regardless, one problem could be because you tell the chopper to land *immediately* when the script is run, instead of telling it to land when it reaches the marker "Rescue". You need to add a delay of some kind to wait for the chopper to reach the marker before ordering it to land. The chopper probably lands the moment the script is run, and then takes off to fly to the marker.
Below is my revised version of your code that will hopefully work. I haven't tested it, so there's no guarantee. If it doesn't work, post again and I'll give other ideas.
;Evac chopper move to the evac point
Rescue1 DoMove GetMarkerPos "Rescue"
; Wait until the chopper, Rescue1, gets within 50 meters of
; the marker, Rescue, before continuing with the script.
@ Rescue1 distance Rescue < 50
Rescue1 land "Get In"
; Wait until Hero and Hero2 are in the chopper. Also continue
; if both are dead.
@ (Hero in Rescue1 or not alive Hero) and (Hero2 in Rescue1 or not alive Hero2)
; Leave the evac point (end the mission. Not done from here)
TitleText ["Let's get out of here!!", "Plain"]
Rescue1 DoMove GetMarkerPos "Escape"
Exit
I'm not 100% sure if you can refer to a marker as an object when checking distance, so if that doesn't work, if you can, put an object there instead, such as a gamelogic.
Actually, I'm going to guess that you cannot refer to a marker as an object in this manner. So, you'll probably have to replace the marker with a gamelogic and name the gamelogic appropriately. If you originally used a marker so that the players can see it on the map, then leave the marker, but also put a gamelogic at the same place.
Good luck!