OpenGL will execute the commands in the order they're issued (or at least simulate this behavior). This means, that there is no problem with using 2 different FBOs, one after another. Also this means OpenGL will make sure, that your rendering is complete at the time you get your result from the FBO.
You can call glFinish()
to have your program wait until all pending OpenGL commands have been processed by the pipeline, but this is unnecessary in almost all cases.