Don't be so hard on yourself, dude, no idiot could even get this far with 65816 assembly language
Adding $FFFF, not $FFFE, is the same as subtracting one (because $FFFF is the two's complement 16-bit representation of -1, and adding -1 is the same as subtracting 1, blah blah blah...)
EOR #$FFFF followed by INC A is the same as negation (it's not clear whether you know this, you probably do but just sayin').
I'm not sure what's wrong - based on your code, if the X velocity starts at 1, it gets flipped - 1 once X = 249. Then the velocity = -2, so on subsequent iterations X = 247, 245...1, -1 = $FFFF. Then the X velocity should get flipped - 1 again, so it'll equal 1 again, so then X = 0 and things should start over...
I will say, as a rule, once your velocities start getting a little more unruly the safest thing to do is force the X position back to a known state on collision. So once you bounce on the left, just STZ BallXPosition and be done with it, and likewise on the right just set it to the max value (248). That probably won't fix your problem here, though.
Try stepping through it in a debugger?