m.Inverse() is essentially the same as m.LU().Inverse() for a square matrix. The LU decomposition also provides the determinant - is it zero as it should be for a singular matrix, or is it NaN as well?
var lu = m.LU();
bool isInvertible = lu.Determinant != 0d;
var inverse = lu.Inverse();