Remember that GPU particles can only collide with surfaces you actively see on screen. So let’s say you set up a rain emitter that is emitting particles. You add a two-sided static mesh plane below it.
If you position the camera above it and can see the entire plane, you should see that the collision response is fairly reliable. Few if any particles should fall below the plane.
If you position the camera below it and can see the entire plane, you should again see that collision is fairly reliable and that particles are killed when they pass through the backface.
If you now position the camera below it like a first person camera only a portion of the plane will be visible to the camera. You will start seeing particles falling through the plane because the portion with which they should collide is no longer being rendered.
For occluding environmental effects you need something more reliable. In the past our artists usually fake it. E.g. you attach the rain emitter to the character and disable it when he walks indoors. That can be combined with some level placed effects around doors and windows.
A better technical solution would be to render out a low res top-down shadow map and use that information to cull particles when they collide with an upward facing surface.