Важным моментом, который упоминается, но не рассматривается напрямую, является разница между «точность» и «масштаб» и тем, как они используются в двух операторах. «точность» - общее количество значащих цифр в числе. «шкала» - количество цифр справа от десятичной точки.
Конструктор MathContext принимает в качестве аргументов только точность и RoundingMode, поэтому масштаб никогда не указывается в первом операторе.
setScale()
очевидно принимает масштаб в качестве аргумента, а также RoundingMode, однако точность никогда не указывается во втором выражении.
Если вы переместите десятичную точку на одно место вправо, разница станет понятной:
// 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