I suspect what is happening is that a collision event is triggered on the left/right first, and that prevents a second collision event with the top/bottom from being detected. In other words, the same collision event can't happen twice at the same time, and so the left/right one is the one that is detected. You can verify this by printing something to the log viewer if a collision on the left/right is detected.
My approach to detecting landing is shown below, and hasn't yet been susceptible to this problem. If you're familiar with the 'on ground' behavior shipped with the jump and run kit, the 'on ground' and 'on ground temp' booleans serve the same role. If you've never seen that behavior before, this is the logic:
On updated:
Set 'on ground' to 'on ground temp'
Set 'on ground temp' to false
On collision with tile
If bottom of self or top of tile was hit
Set 'on ground temp' to true
My approach triggers landing on the one frame where 'on ground temp' is true and 'on ground' is still false.
I'm not sure why my approach is working and yours isn't, though. I don't think the logic is all that different--we're both using direction based collision detection. I verified my landing does trigger when brushing up against a wall, so it may be worth trying.