Un punto importante al que se alude pero no se aborda directamente es la diferencia entre "precisión" y "escala" y cómo se usan en las dos afirmaciones. "precisión" es el número total de dígitos significativos en un número. "escala" es el número de dígitos a la derecha del punto decimal.
El constructor MathContext solo acepta precisión y RoundingMode como argumentos y, por lo tanto, la escala nunca se especifica en la primera instrucción.
setScale()
obviamente acepta la escala como argumento, así como RoundingMode, sin embargo, la precisión nunca se especifica en la segunda declaración.
Si mueve el punto decimal un lugar a la derecha, la diferencia quedará clara:
// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456