AABB Collision problem with adjacent tiles

Hi. I have been reading through a lot of collision detection resources, but I haven’t managed to find anything regarding my problem (mainly because I don’t know how to name it exactly …).

I am currently rewriting the collision engine for my 3D game to something proper and wanted to start really simple: only AABBs collide with each other. Also, a dynamic entity (the player) can only collide with static geometry (the map).

So I used SAT in its most basic form and also calculated the minimum translation vector (penetration vector).
Illustration:

Entities are moved by the movement system, afterwards the collision system detects the collision, calculates the penetration vector and adjusts the position and velocity accordingly. All fine until here.

However, the map is similar to a tile-based environment because it consists of a grid of pistons (Screenshot). Those pistons can extend upwards individually, which is why all of them have a separate bounding box.

Now, the problem arises when the player walks over that (for now flat) surface of adjacent AABBs. As it approaches the edge of a piston, the horizontal distance to its wall becomes smaller than the vertical penetration caused by gravity, so the collision system decides to push the player outwards horizontally.
Illustration:


(green arrow indicates the movement of the turquois point because of gravity)

If there would be emptiness around the piston, that would be acceptable, but because they are tightly packed next to each other, the player is now right between the adjacent pistons and simply falls downwards.

I assumed this would only happen at high falling speed, but since it even occurs when just walking, it poses a huge issue.
Are there any established ways to solve this issue? How exactly should this be labelled? (so I can search for solutions …)

Or am I missing something obvious? Shouldn’t this be the problem of any tile-based AABB collision system, even in 2D?

Any help is appreciated. Thanks!

For the sake of completeness, here is the relevant collision code, but I believe that it does what it should and the problem lies in theory, so it shouldn’t be very important:
AABB class: http://pastebin.com/GDCpis9M
Method to detect and resolve collision of 2 entities: http://pastebin.com/ymjZikPG