Answering myself, if somebody find a better solution please answer and I will change my accepted answer.
The only reliable way to access the render result pixels is this:
1- Save the actual value of bpy.data.scenes["Scene"].render.filepath to a local variable
2- Set bpy.data.scenes["Scene"].render.filepath to something to avoid overwriting any previous render, for example "//temp." + str(time.time()) + ".png". 1 and 2 can be ignored if you don't care of any previous render.
3- Call bpy.ops.render.render(write_still=True). write_still set to true will cause the file to be immediately written to disk.
4- Create a new image and load that file from disk, or use an existing image reserved for this purpose in your blend file and set its filepath and then reload.
5- Do what you need to do with the loaded image pixels.
6- Remove the loaded image, except you have a good reason to keep it in the blend file.
7- Restore the original value of bpy.data.scenes["Scene"].render.filepath
In resume: the only reliable way to access pixel data of a render is to render it, save to disk immediately, recover from disk, read pixel data.
At the time of writing this, Blender version is 2.68.