Here are some thoughts.
E1513 bad reference to pointer/handle. The handle is not a var alone its reference to an object. It must be valid. This error is almost always a bad pointer.

I'd use
if(ptr_for_handle(sndhandle) != null)
Stead of if(sndhandle != 0)

Not that there is much difference, but just because a Handle holds a
value, that doesn't mean it's a valid value.

Other manual quotes.
http://www.conitec.net/beta/aent_playsound.htm
Quote:
The entity must already be initialized at the time the sound is played. Thus the sound can be played 1 frame cycle after entity creation the earliest.


Of course you'd be safer to wait(1) after Entity creation and wait(1) after the _play instructions before testing for the snd_playing.