Okay, through playing around with hid and xinput tests I've managed to determine the root cause, which is that xinput's scaling logic is kind of broken. In particular it scales X value coordinates to the range [-32767, 32768], which breaks when the controller is held all the way to the right (which often is not physically "all the way to the right") because 32768 wraps around to negative. The reason this worked before is because of some quirks involving signed multiply. I've sent some patches which should address this.