I believe you're on the right track. Take a look at my amazing artistic skills here ;)

Let's say that the player is the red block with the solid being their current position and the open square being their previous position. Now say that the blue tile is the platform you expect to land on and the green one is some other "impassable" tile beneath it.
The collision resolution assumes the you can only intersect one solid tile at a time and checks against it. Specifically, these lines
if (previousBottom <= tileBounds.Top)
isOnGround = true;
So if we look at the right side of the image we can see that technically your previous bottom position would be less than the green tiles top. Since we've determined that, we assume it's a piece of ground and try to move on top of it. Then on the next go around since we've "corrected" the vertical collision, any other collisions will be treated as horizontal collisions and attempt to "push you away" from the other block, thus giving you a diagonal descent in to the pits of no-clip zone.
You've got a couple different solutions you could try:
- Change the maximum falling speed to be no greater than the height of your tiles.
- Use a more advanced collision structureUse a more advanced collision structure and try to predict collisions before they occur.
- Check not only tiles you're directly colliding with but also one (or more) in a given direction. For example, if you're colliding with an "Impassable" check the tile just above it to see if it's a platform. It'd be pretty safe bet to say you passed through it if that's the case.