+?означает, что ваше совпадение будет принимать минимум возможного количества символов, то есть оно будет захватывать внутренний оператор в скобках.
Попробуйте:
source = source.replaceAll("\(?\(.+?\)\)?", "");
I 'мы только что обернули ваше регулярное выражение с \(?
и \)?
.