I suspect that your problem is that your RobotDrive class is not set up properly for the way your robot is wired (one side is either not inverted (using RobotDrive::SetInvertedMotor()), or inverted when it shouldn’t be).
It’s probably just working in teleop mode by lucky coincidence, because your joystick setup looks strange - you’re feeding what seems to be the twist axis (4) into the moveValue parameter of ArcadeDrive, and the Y-axis (2) into the rotateValue parameter.
I doubt the non-reentrancy of your kicker function is the issue, because non-reentrant functions only cause problems when they’re called more than once at the same time (i.e. by different threads), and I’m pretty sure all the Periodic/Continuous methods in IterativeRobot execute in the same thread.