I would like to mention for anyone reading these messages that we solved the problem and it had nothing to do with XMesh. Somehow, the IntersectRay’s first socket was connected to the SECOND socket of the InputGeometry internally (despite what the Editor screenshot shows). I have no idea how it happened, but once the correct connection was recreated from the first output socket of InputGeometry, supposedly it started working. The error message clearly lists that the wrong sockets were connected.
Regarding projecting the particles both below and above the surface, I proposed a simple fix by adding a Vector like 0,0,1000 to the Position->WorldPosition-> branch which would shift the shooting point of the ray 1000 units higher than the actual particle position. This way, any particles up to 1000 units below the surface, as well as any particles above the surface, would be projected down.
The alternatives would involve shooting two rays and checking the validity of their results and using the valid one, or using NearestPoint which would potentially move points to a point that is closer but not exactly “down” along -Z.