Since the problem happens when there is too many things going on... are you using time-based movement?
If so, maybe your gravity (or something else) is moving too much down, and the player is "moved" below the terrain; try putting a fixed FPS using timers, with a very slow fps (like 10-20 for testing) and see if they fall through.
If so, maybe your gravity (or something else) is moving too much down, and the player is "moved" below the terrain; try putting a fixed FPS using timers, with a very slow fps (like 10-20 for testing) and see if they fall through.