When you call route(waypoint), set a flag. When the directions_handler function runs, clear the flag, don't re-render the directions.
var directionsRedraw = false;
google.maps.event.addListener(directionsDisplay, 'directions_changed', function(){
if (directionsRedraw == false) {
directionsRedraw = true;
var waypoints = directionsDisplay.getDirections().routes[0].legs[0].via_waypoints||[];
for(var i=0;i<waypoints.length;++i){
waypoints[i]={stopover:true,location: waypoints[i]}
}
route(waypoints);
} else {
directionsRedraw = false;
}
});