Одна вещь, которую вы должны проверить, чтобы увидеть, если вы еще не решили эту проблему, это сравнить то, что вы делаете в ваших обратных вызовах Activity onPause / onDestroy, с тем, что вы делаете в обратном вызове surfaceDestroyed. Если вы используете GLSurfaceView или другой стандартный SurfaceView для ручного управления OpenGL, вы гарантированно получите действительную поверхность, начинающуюся только при вызове обратного вызова surfaceCreated, и заканчивающуюся при вызове surfaceDestroyed. Поэтому, если это происходит при выходе из приложения, вы должны увидеть, пытаетесь ли вы манипулировать поверхностью после того, как она уже уничтожена.
Еще одна вещь, которую следует учитывать, это то, что ваши записи logcat выглядят так, как будто исключение было сгенерировано при попытке вызвать eglCreateWindowSurface (), поэтому вам может потребоваться выяснить, почему вы пытаетесь создать новую поверхность рисования OpenGL при выходе из приложения.