RooMinimizer::contour (var1, var2, n1, n2) ignores the values specified with n1 and n2 (etc) and generates every contour as if n1=n2=1. This means the default (n1=1, n2=2) makes two identical contours.
I think the problem is that the SetErrorDef call does not work once the initial minimisation is done. However, if SetErrorDef is called before running minimize, then the global error level can be changed.
This problem does not occur if RooMinuit::contour is used instead.
On a related matter, I'm also not sure whether the ErrorDef values used are appropriate for 2D contours (for RooMinimizer or RooMinuit). For 68% and 95% contours, I specified n1=sqrt(2.3) and n2=sqrt(6.0), corresponding to ROOT::Math::chisquared_quantile(0.68,2) and 0.95. The sqrt() is just because contour() uses n1*n1 etc. Would it be better if contour() used for the "n-sigma" contour: ROOT::Math::chisquared_quantile(2*ROOT::Math::gaussian_cdf(n)-1,2) (or maybe there's a simplification)?