I'm not sure if others have noticed this, or maybe I'm just not super familiar with how this should work, but it appears that my system is not operating as a "closed loop" robot. The encoders do not appear to provide real-time updates, for example, if the e-stop is pressed and a joint is manually moved. I've ensured that all encoders are correctly wired by using the "test encoders" program.
This problem can be demonstrated by auto-calibrating the robot, pressing the e-stop, moving the arm, releasing the e-stop, then re-homing using the "home" program. A closed-loop system would theoretically "remember" where home is relative to the updated position, but the system does not in this case.
Is this expected behavior, or do you think there's a problem with the code?