Well, I just played a game today where something very interesting happened: my upgraded Roaches (+2/+2) took on a Protoss army built to counter it (Stalker/Immortal/Colossus, although not many of the latter two), and absolutely destroyed it. While I think micro had a lot to do with it, as well as Zergling support, it really emphasized for me the power of early upgrades, especially when you can stay ahead of your opponent.
The difference becomes really evident when the numbers of units get higher - you don't want to upgrade early so that your early units are effective - when you're pressed, it's better to spend the gas on more units than on upgrades that you don't get as fast as you get units! Also, upgrades are no good if you have no units left for them to affect...
The key to the game I linked above was probably offensive play. It's important for your opponent to feel pressured, and it's important, as Zerg, to have forward-positioned units to see attacks coming so you can pump reinforcements. Delaying my opponent's third, while getting my own up and running, was also highly effective.
I also realized just how effective even 2-3 Infestors can be in slowing and damaging an approaching army. It's the only AOE (area of effect) attack that Zerg has, but it's very very good. The problem is that making TOO many infestors costs a lot of gas that could become units that keep attacking, rather than having energy-depleted infestors trying to clean up the last few units. Again, if things are tight, don't go with a pile of Infestors - get a base army going, THEN pile on some more Infestors.
Yes, my macro could be much better.