Several updates and in the end I seem to have found a solution, but not a great on.
I don't think the preloading idea would work. From what I can tell there is no way to know if the preloading has finished. As I recall I could do that using javascript but that would make this whole issue more complicated.
Klaus - I wonder if adding a sound[name].onloaded event might be worthwhile. Perhaps consider having stopsound() cancel the downloading of a sound file if it hasn't completed, yet.
The solution was to play another sound in the same-named sound object. So, while sound[tour] is still downloading playsound(tour, "silence.mp3") prevents the downloading file from playing. I don't think the downloading is actually stopped because a little later an error gets thrown, "ERROR: Soundinterface Load Error: Decoding audio data failed." If that is correct, the old downloading file will continue to hog bandwidth that won't be available to download a new audio file. A way to actually cancel the download would be better. Forcing a user on a slow connection to sit idle while an unwanted download finishes before they can play a different sound file is not a good experience.
Silence.mp3 is a one-second mp3 of silence.
Originally I said that I tried the above and it didn't work. That was when I called an action in my soundplayer plugin to play silence.mp3. Although it includes the same playsound() action, that didn't work. Just calling playsound() by itself did, although apparently only by throwing an error.
BTW, you can tell if the file is still downloading by checking sound[name].position. If it isn't > 0 it hasn't started playing because it hasn't finished downloading.
Why has no developer had this problem before? I think it is because we all have fast systems with fast internet so we wouldn't notice it. Not everyone is so lucky.