It seems like it is a common problem that the objects that are updated first will dominate the objects that are updated last.
The way this is done in "real" game physics engines is to first calculate all the collisions and other constraints (such as joints), and then, in a second pass, solve for all the constraints at the same time, typically using a big-matrix LCP solver. Packages like Havok, PhysX, ODE, Bullet etc all do it that way. Also, JigLibX and BulletX for XNA do it that way, too.
A slightly simpler and sometimes good enough solution is the one already suggested here: solve the constraints in velocity space, rather than position space. Typically, you will apply penalty impulses from detected collisions, and then accumulate all the impulses into velocity, and finally solve for the new position of all objects when all impulses/forces/velocities have been resolved. The draw-back is that each impulse doesn't know what the others are doing, and thus the overall solution isn't as "globally consistent" as with an LCP solver. This will be noticed mostly when colliding in corners, or colliding with multiple objects at the same time.