I've tested everything
Obviously not.
I'm convinced that there's something weird with the way the computer treats where the player is located at on the grid.
The calculations that I gave you will only go far as to tell you which tile (0, 1, 2, 3 in your map) is under a specific coordinate. You've been using the player sprite position for this; it's likely that your sprite's origin is at the top-left corner of the sprite so will "be in" a tile when the top-left corner is. To see if the centre is in a tile, you'll need to offset the value.
What I noticed is that a collision only happens when the player is touching the bottom of the tile. I really just want a collision which returns true if any of the sides are touched by the player.
This can also be caused by the effects of the origin being at the top-left. You can either add half of your sprite's size to its position when you calculate it's grid position, or you can just change where its origin is:
player.sprite.setOrigin(player.sprite.getLocalBounds().width / 2, player.sprite.getLocalBounds().height / 2);
You only need to do that once.