a) correct – you were creating an extra FBO for drawing offscreen from the main context when you can just draw in the context you create – but in fact you never do any drawing at all (apart from what happens inside Syphon)
b) -update doesn’t do what you think it does, see the documentation. You could do a glFlush() but actually Syphon flushes to push updates to clients.
c&d) CGLMacro.h handles directing commands to the correct context instead of using the more expensive makeCurrentContext, etc (see documentation). As you have one context per device you do need to make sure each device directs its commands to the correct context, but CGLMacro.h takes care of that (by using the value of the specially named cgl_ctx ivar to identify the context).