Apparently I am misunderstanding rotation of child prims. Here's what I'm doing:
I have 4 flat discs arranged in a square. I want each disc to rotate around it's own Z axis. llTargetOmega or llSetLocalRot works fine. I then put a single larger disc under the 4 discs and link the set with the single large disc being the root prim. I want the larger disc (and thus the 4 spinning discs) to rotate around IT'S own Z axis. Again, llTargetOmega or llSetLocalRot (or even llSetRot) works fine. The 4 discs spin on their Z's and the entire lot spins on the larger disc's Z.
The issue comes when you try to add another "level" under the single larger disc. If I then put another larger disc under the single one, so that the "single" now becomes like one of the 4 discs on the next larger disc, rotation breaks on all but the inner and outer most links. For a real life corollary to my set up imagine a "tea cup" ride at an amusement park. Only the first 4 discs will spin and the rest of the linked set will spin around the Z-axis of the now root prim (the newest largest single disc). No amount of code fiddling between llTargetOmega, llSetLocalRot and llSetRot nor unlinking and relinking with a different root prim will make it work.
Why is this? Is it some weird implementation of the Chaos Theory (lol..Period 3 implies chaos). What am I not grasping here? I'm thinking I'll have to get the center vector of the "middle" prims and do a lot of math to make them rotate around those points because of the way links work.
Thank you for the response.