Constraints on arm to avoid dependency cycle when using IK

I set up a rig with the following parent relationship on the arm: Spine3 > Shoulder > UpArm > UpArmY > LowArm > LowArmY > Hand. I also have a bone ArmControl whose parent is Spine3. The bone UpArm has a Copy Rotation and a Transformation constraint, both of which use UpArmControl as targets. The shoulder bone also has a Transformation constraint that uses UpArmControl as a target. The purpose of UpArmControl is that if Shoulder depends on UpArm and UpArm depends on itself, there would be a dependency cycle. When using FK I rotate UpArmControl instead of UpArm.

This works for FK but not IK. When I use IK, UpArmControl does not rotate so the constraints that use it as a target are not affected. I can put a Copy Rotation constraint on UpArmControl, and set a driver on the influence so it’s only active when IK is turned on. However, that creates a dependency cycle (since UpArm already has constraints that depend on UpArmControl, so adding the Copy Rotation constraint on UpArmControl causes both bones to depend on each other).

Is there a way around this? I’ve thought about making a copy of the arm and putting the IK constraint on the copy, and Copy Rotation constraints on the original. The problem with that idea is the constraints on UpArm can’t be on the copy without creating the same dependency cycle, and when the original UpArm rotates, its constraints will move the arm bones that are descended from it so the hand will not end up on the IK target. I think I might have to write a Python script that runs an IK simulation and use drivers on all the bones of the arm to make their rotation match the output of the Python script.
20180730.blend (632.9 KB)