There is no need for a Spot check. I assume the party saw the Druid (and his companions) and vice versa? So no need for a Spot check. The way it should have played out was:
As soon as the Druid starts to cast, roll for init (before the spell even goes off). The whole purpose of init is to catch people off guard (flat-footed). You just declared that the Druid automatically caught the party off guard, and that is incorrect. Whose to say that someone in the party would not be able to react before the Druid finished casting?
Exception: If the Druid was hidden from sight, then yes he would have gotten a Surprise Round to cast. Please clear up if the party saw all the elves and vice versa.
Ok, so Init should have been rolled. Now if someone in the party beat the Druid's init, they could then Ready their action. If they have Spellcraft, they can see what exactly the Druid begins casting. Otherwise, they can do what they want (if they don't think the elves are hostile at this point, no reason for them to attack... remember, they beat the Druid's init, so the Druid didn't get to cast yet so they don't know what he is up to).
Now if I was one of your player's in the Entagle, I personally would have dropped prone once I saw arrows fly at us. The Ranger's would get a -4 to hit for firing at a prone character. Did any of them do that?
Also, as a player, I would first be upset too that they dropped Entange and fled. For me (as a player) I would feel cheated, like you were holding back. If a DM fudges rolls or doesn't play enemies to the best of their abilities, it seems like you are being a carebear. What fun is playing a game without any risk? Why even play if there is never a fear of dying?
That being said, if there was an actual reason why they elves withdrew other than ("Well, I didn't want to kill my player's off"), that is a different story. And as someone else mentioned, I might let me player's know there IS a reason they withdrew but it is part of the story and you don't want to ruin it by telling them that reason.