Sounds like a TCP issue. The brakes in the robot are physical stops, there is a "spider wheel" that spins with the output shaft and a pin on a solenoid that when active pulls the pin out of the brakes. That is why when you have the robot powered off you can still move the joints slightly, the spider wheel it turning slightly and bouncing off of the pin as two different teeth engage the pin. Do you have more than 1 TCP setting in the robot? If so, are you dictating on the moves which TCP to use, or are you just defaulting to the active TCP? If you change the TCP the pose points will stay the same but the tool will appear to go to a different position even though it actually is not.
I am having issues with the waypoints in the program. I have captured the robot tcp position and the joint position and they all read fine up until 4 or 5 decimal places but the robot itself is way off of where it should be. The fixture has been secured and is not moving, the robot base is secured and has also been measured and is not moving. Is it possible that there is a brake that is slipping over time and not registering in the encoder? We are using this robot with a visumatic screwdriver. I notice that if the robot sits idle over the weekend then the z direction changes drastically when started back up put the position reads the same.