After digging a bit online, it seems that in the singular value decomposition used as part of the pseudoinverse, it's common to set singular values below a given threshold to zero to avoid instabilities. The Math.Net pseudoinverse implementation I use doesn't provide any control, but I reimplemented the method with threshold parameter. I had to set it super large (0.01) to avoid the issues, but then it seems to work. (2/2)