So there are two things to worry about: the buffer’s sort value, and the task to update the reflection camera.
Now, if you print taskMgr, you should see something like this:
>>> print base.taskMgr
AsyncTaskManager TaskManager
Task chain "default"
Task sleep(s) dt(ms) avg max sort
-----------------------------------------------------------------------------
resetPrevTransform -51
dataLoop -50
eventManager 0
ivalLoop 20
collisionLoop 30
garbageCollectStates 46
igLoop 50
audioLoop 60
“igLoop” refers to the rendering task. So you need to make sure your task to update the camera and shader inputs are run after any tasks that might update the camera, but before igLoop. So try giving it a sort value of, say, 45.
As for the buffer, you need to make sure it is rendered before the main window. So, any negative sort value will probably do the trick.