calling execute() every tick
I agree having everything in onScannedRobot for a 1v1 bot is reasonable, and is a setup I've used in some bots. I just have an infinite loop in run() like Wompi put above.
I see your initialization code only runs in the first round. I don't know what's happening, but if your bot throws an exception in the initialization in the first round, you'd be dead in the water. I usually check for null... but at least this way it's really obvious something is wrong, which is probably a good thing.