No hace falta complicarse tanto. Leyendo el API y el mensaje de error uno se puede dar cuenta que el problema es que el parametro que se le pasa al replace es una expresion regular y que ? es un caracter especial para las expresiones regulares, así que hay que codificarlo (escaparlo).
Cita: "lo que sea ? ? ".replaceFirst("\\?", "*")
Y listo.
S!