Sorry, I was speed reading the description. (its a bad habit when I have a code snippet to look at)
I never had much luck with the hudfadeout either.
I have no clue as to what the problem is, but I am going to play with it to see if I can figure something out.
"I'll be back"
Edit
Well, it seems that the HUDFADEOUT seems to only like working in the same state that you show the HUD. (probably due to its built in timer)
So, it waits to show until the fadeout is called for some reason.
We know that using the unshow works fine, but it doesn't give the effect you want.
So, the obvious solution (workaround) is to use both.
I made a second instance of the same HUD so one can be shown/unshown (for displaying between states - our missing part of the effect), and the second one used for the fade out.
The extra texthud simply fills the void created by our fadeout issue.
Anyway, I think this
;Header
desc = COD Health
;Triggers
:state=0:hudreset,hudx=50,hudy=50,hudimagefine=gamecore/huds/user/eyehud.dds,hudname=blood,hudhide=1,hudmake=display
:state=0:hudreset,hudx=50,hudy=50,hudimagefine=gamecore/huds/user/doorsopen.dds,hudname=htext,hudhide=1,hudmake=display
:state=0:hudreset,hudx=50,hudy=50,hudimagefine=gamecore/huds/user/doorsopen.dds,hudname=htext2,hudhide=1,hudmake=display,state=1
:state=1,plrhealthless=25:plrsound=audiobank/misc/ping.wav,hudshow=blood,hudshow=htext,hudshow=htext2,state=2
:state=2,plrhealthgreater=24:hudunshow=htext,hudfadeout=htext2,hudunshow=blood,state=1
;End of Script
comes close to what you are after.
Just remember to change the paths back for your images, because I used my own images for testing.