Looking at your example code, I see two problems.
First, when you use run() AccelStepper will accelerate your motor to the maximum speed. Any settig of speed by setSpeed() will be ignored. The maximum number of steps per second for all motors (assuming an Uno or similar) is about 4500 steps per second. The combined speed of your two motors is 6400 steps per second. That's too fast! So AccelStepper does the best it can. When one of the motors stops, the other will now be able to speed up. This is what you are reporting.
Second, When you change direction while the motor are running, AccelStepper will first decelerate to a stop, then start accelerating again in the new direction. Again, exactly what you report.
You may find the following of use:
HTH
-jim