I don't know if you've got this part down, but I'll explain it just in case. Before getting to sliding and bouncing, maybe I should have started with stopping exactly at the point of collision. Here's a circle to circle implementation(vectors are in bold):
Say you have two circles, one of them is moving(let's call it circle1 and the non-moving one circle2) - let circle1 have coordinates p = (p0x,p0y) and radius r1 and let it's movement vector have coordinates m = (mx,my) - then if we translate circle1 by this vector it will have coordinates p1=(p1x,p1y), where p1x = p0x+mx and p1y = p0y + my, now let the second circle have coordinates q = (q0x, q0y) and radius r2. I won't go through the mathematical derivation - if you want it though, just say.
Let's say circle1 and circle2 are not in a state of collision. What we need to find is where circle1 needs to be after the movement vector is applied. If it doesn't collide with circle2 it will just be translated by the movement vector, however if it does collide we need to find where it should be in that case.
Let:
A = dot((p1-p0),(p1-p0)) = (p1x-p0x)*(p1x-p0x) + (p1y-p0y)*(p1y-p0y)
B = dot((p0-q),(p1-p0)) = (p0x-qx)*(p1x-p0x) + (p0y-qy)*(p1y-p0y)
C = dot((p0-q),(p0-q)) - (r1+r2)*(r1+r2) = (p0x-qx)*(p0x-qx) + (p0y-qy)*(p0y-qy) - (r1+r2)*(r1+r2)
D = B*B - A*C
If D<0 then there is no collision and you just translate circle1 with m without a care in the world.
If D>=0 then here's how we calculate our answer:
t1 = -(B + sqrt(D))/A
And if 0<= t1 and t1<=1 then there's a collision, otherwise there is no collision and we can just translate circle1 with m without a care in the world.
In the case there is a collision, the new coordinates of your circle when it collides would be:
newX = p0x + mx*t1
newY = p0y + mz*t1
To illustrate all of this I've made a little program (I hope it doesn't crash on your PC), w,a,s,d to move the camera, left mouse button to choose where you want to move the sphere, space to actually start moving the sphere:
http://www.mediafire.com/download/oouhkxydcw91d2w/ss_coll.7z
P.S. "Moving Very Very Fast Syndrome"™ doesn't apply in this case, because the solution is analytical and not iterative.
After you are in a state of collision you can apply sliding for example so you won't enter the object(if you are not in a state of collision do not apply sliding or you'll get an effect you don't really want), but just slide on it (the normal of circle2 at the point of collisions would be n = (nx,ny), where nx = (newX - qx)/sqrt((newX - qx)*(newX - qx) + (newY - qy)* (newY - qy)), ny = (newY - qy)/sqrt((newX - qx)*(newX - qx) + (newY - qy)* (newY - qy)) .
Also, in the case you are testing for collision against many objects - get the smallest t1.
Another thing to note is that you can optimize collisions a lot by just ignoring all the objects that are at a distance > length(m)+r1+r2 (r2 being the radius of the object you're currently looking whether to perform collisions tests on). Even faster would be the case of squared distance, or even a rectangle with sides length(m)+r1+r2. But these are optimizations so you can disregard them for now, I'm just saying it so you would know there are possibilities for optimizations.
P.S. If you want something simpler, you need to give more specifics about how you handle physics in your platformer - for example how you handle movement, because what I wrote is a really general case that should work in pretty much all 2d cases, while I believe that this could be really simplified depending on the restrictions imposed by the fact that it's a tile based platformer.