I've recently been bitten by code that uses Inversion of Control when it's not appropriate. Lately, I'm of the opinion that IoC is among the patterns that have the worst effect when misapplied. This is because it tends to create a coupling of classes that can cause a lot of shotgun surgery if you run into a circumstance that's a little different from what you had originally intended.
So, I'd like to get a clearer picture of when IoC should and shouldn't be used. Any advice?