Observer.onError disparando inconsistentemente

Estou usando o Retrofit para acessar minha API da seguinte maneira:

public interface UserService {
    ...
    @POST("/user/login")
    public Observable<User> register(@Body() User user);
}

Aqui está como eu acesso minha API:

mUserService.register(user)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<User>() {
    @Override
    public void onCompleted() {
    ....
    }

    @Override
    public void onError(Throwable e) {
    ....
    }

    @Override
    public void onNext(User user) {
    ....
    }
});

Isso funciona perfeitamente bem, exceto quando há uma exceção (ou seja, IOException ou quando a conexão atinge o tempo limite), o método onError não é acionado; em vez disso, recebo uma exceção no thread principal que encerra meu aplicativo.

No entanto, em alguns casos (como quando a chamada da API responde com o código de status 400), o método onError é acionado conforme o esperado.

Depois de cavar a saída do logcat, localizei esta linha (não sei como devo lidar com isso)

rx.exceptions.OnErrorFailedException: ocorreu um erro ao tentar propagar o erro para Observer.onError

Alguém pode me informar onde estou fazendo as coisas de errado?

questionAnswers(2)

yourAnswerToTheQuestion