I guess the main reason why 3drotate and 3dvolreg cannot be used one after another is mainly because each step involve in some sort of interpolation. Doing the interpolation more than once can easily destroy the data badly.
This statement is **NOT** correct. What you are doing with your list of operations is
(a) using 3dvolreg to move the data around spatially, and also produce a list the movements
(b) throwing away the moved data, then moving it again in exactly the same way with 3drotate
(c) then using 3dvolreg to move the data around AGAIN
What the problem we have with this sequence is that it makes no sense whatsoever -- we cannot imagine what useful purpose is achieved by doing things this way. Just do step (a) itself, and use the registered output from that as your realigned data. Skip (b) and (c).