TDecompSVD can manipulate singular matrices.
Try:
TDecompSVD covMatrixSVD(covMatrix); // covMatrix is a TMatrixD or a TMatrixDSym
covMatrixSVD.Print();
Double_t d1, d2;
covMatrixSVD.Det(d1, d2);
cout << "determinant = " << d1 * TMath::Power(2., d2) << endl;