synchronous master-slave communication

bigfun:
This is just to report my progress with getting a master Arduino to send query information to a slave Arduino, which then synchronously returns the specified data.

Can you explain exactly what you mean by "synchronously" in this context? Do you mean, you ask a question and get an answer?

... this means that the onReceive handler has to take the data passed to it, process it however it needs to be processed, and put the results into global variables that can then be queried in the onRequest handler ...

What is the problem with global variables? The response is done in an interrupt handler, so the thing you are responding to must, therefore, be in a global variable somewhere.

I have done some examples of sending/receiving data via I2C here (scroll down to "Request/response"):

You shouldn't need to send things three times. Why do that?