For 1 and 2 I confirm that the errors reported by onServerError and onSubscriptionError are related to the lists in appendix A and B, respectively.
However, some error cases are handled by the client library and hidden to the application; moreover, errors related to wrong requests are not possible if the requests are issued by the client library.
Obviously, the errors are related to the requests performed, hence some of them are not possible if the application doesn't use the related features.
A further error code for onServerError, named 61, is produced by the client library if something unexpected comes from the Server.
For the above reasons, the error listings in the documentations of onServerError and onSubscriptionError should be a better reference.

For 3, you can refer to the documentation of onStatusChange. As you can see, the state can change for many reasons.