limmy3, your problem lays in the fact that your script runs through to the very end no matter what because there is no instruction after any of the #dWW labels for the script to go anywhere else than straight down, and when the alive check reaches the first dead soldier the script will jump into the corresponding dWW label and run to the end from there without checking for any more dead soldiers..
I mean that if for example W_1 is dead your script will jump to the #dWW1 label and run through from there as it has nowhere else to go and thus all soldiers after W_1, dead or alive, will do the surrender stuff.
Add boolean variables in the beginning of your script for each of the #dWW labels, for example:
; loose.sqs
LP_2 SetDammage 1.0
dWW1_checked = false
Then modify the alive checks
?alive W_1 && !(dWW1_checked): goto "dWW1"
Again, do this for each of the checks..
And finally, modify each of the dWW labels accordingly
#dWW1
dWW1_checked = true
W_1 action ["drop Weapon",Barrel,0,0,"UKF_SA80"]
~1
W_1 action ["drop Weapon",Barrel,0,0,"ukf_browning"]
~1
W_1 SwitchMove "FXStandSurUniv"
goto "check_alive"
Should work..