Sorry for the delay. As promised I had deeper investigations on the topic and
I think I have finally found the issue:
After exactly reconstructing the scene and reproducing the collision I found out that BIHNode checks the same triangle intersection at line 402 and 408 in local/world coordinate systems. This should lead to the same result but it doesn’t.
A slight difference is visible in inside Ray.java Line 309 which leads to contradictory intersection results:
Calling float t = r.intersects(v1, v2, v3); at Line 402 the following behavior occurs:
dirDotDiffxEdge2 = 4.5776367e-5 and the condition >= 0 is satisfied ==> A final distance is returned
At Line 408 the following behavior occurs:
After the transformation the SAME triangle intersection check leads to a different result
dirDotDiffxEdge2 = -0.0078125 and the condition >= 0 is no longer satisfied ==> Infinite distance is returned.
I hope I could be of help with these results.