Um ponto importante que é mencionado, mas não abordado diretamente, é a diferença entre "precisão" e "escala" e como eles são usados nas duas declarações. "precisão" é o número total de dígitos significativos em um número. "escala" é o número de dígitos à direita do ponto decimal.
O construtor MathContext aceita apenas precisão e RoundingMode como argumentos e, portanto, a escala nunca é especificada na primeira instrução.
setScale()
obviamente aceita escala como argumento, assim como RoundingMode, no entanto, a precisão nunca é especificada na segunda instrução.
Se você mover o ponto decimal uma casa para a direita, a diferença ficará 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