Double buffering should be enabled by default if you're rendering to an EGLSurface. As you say, the buffers are not automatically swapped. If you're using the SDK, the swap should happen after you exit from onDrawFrame. Under the hood that's should call eglSwapBuffers.
Since there is double buffering by default, you will also be rendering to the backbuffer by default (otherwise, your half-rendered frames would show up on screen).
It sounds like you have a number of options; including 1) render to the backbuffer when needed, retrieve your color codes, and then clear the buffer and proceed with your normal frame update, and 2) render to an offscreen buffer, i.e., a framebuffer object.