I used to use EC2, but I've found I get significantly better performance (and of course support) at Rackspace for the same price. Also avoid Rackspace cloud sites, performance is pretty awful.
Anyway back to the dedicated server point. If you use virtual servers you can very easily replicate images, spin up copies and scale your computer power on the fly. Case in point, I was running one of my apps on a $10 pm instance on Rackspace. We got a Techcrunch article out of nowhere and the site instantly died under the traffic. I resized the server on the fly and boom, * straight back up. Once the peak died down I scaled the server back down. A couple of months down the track we get near Techcrunch traffic every day and I haven't had to scale the code base at all - I just keep it running on a larger instance. Much, much more cost effective.
* ok not straight. Unfortunately when resizing a Rackspace cloud instance under heavy load it takes ages to run (30+ min isn't unusual compared with 5 min under light load). I've found that the best solution is to spin up a copy on another instance and change the dns to point to the new one. I wish Rackspace would add some way to temporarily block traffic to a server to it can scale. Some kind of "panic", scale me up, button would be great.