Owen,
Thank you for your reply and taking the time to try this. The fact that you were not seeing the same thing I was made me revisit this with different eyes.
I tried your sample page on jsbin and, as far as I was concerned, saw the same problem that I've been seeing all along. However, because of your console output above, I left the browser alone for a while and eventually the layers-add-result event did fire but only after the timeout to load the bad URL was exceeded. I certainly didn't expect that.
The ESRI JSAPI recognizes right away that it can't communicate with that bad URL and yet it continues trying to do 'something' with it and doesn't move on in the map loading process until whatever that is times out a minute later.
So, perhaps the problem isn't that the layers-add-result doesn't run (as I originally supposed because I didn't expect to have to wait a minute for it to do so when it was clear it couldn't load the service right away) but that the JSAPI is not aborting out of the attempt to load the service properly when it does encounter a problem.
I suppose I can attach layer-add-result event handlers to each layer and, if an error is encountered with any of them, I can display a "loading" image with a message that there appears to be problems loading some layers and ask the end user to wait. I wonder if they will...
Okay, well, I guess that's the best I can do with this situation.
Thanks again,
jtm