I apologize; I haven't read very much of this thread. So this post may be redundant or addressing well known issues.
1) Limit the canard's maximum angle of attack to just a few degrees, no more than perhaps 6 and probably less (avoid discontinuities in the lift vs angle of attack due to changes in flow characteristics), so the flow stays fairly 2D rather than being more 3D. That will minimize complex canard-fin interactions that can cause things like control reversal, and other nonlinearities in control response.
Besides, it is more efficient to persuade the rocket to go roughly straight than to brute force bash it straight. Retained energy is a lot higher being gentle with the maneuvers.
Low control surface throw also reduces control overshoot and similar issues due to the lag between maneuver initiation and subsequent control surface correction. Because of this lag, it is easy to generate maneuvering algorithms that when coupled with an actual flight vehicle, result in oscillatory flight. The lag is primarily due to (a) insufficient sample rate (b) control surface rates of motion (c) moments of inertia. Note (c) is quite different in the roll axis than pitch and yaw, for rockets. Roll response to control system input will be much more rapid than the other axis.
2) Put the pivot of the canard near the neutral point for the canard. For instance, for subsonic flight with symmetric airfoils, that is around 25% of the MAC (Mean Aerodynamic Chord). NOT near the middle! If supersonic, that point may move a little bit, +/-, depending on mach number. Putting the pivot very near the neutral point reduces the holding force to near zero, cutting a lot of mechanical load out of the servo system.
3) Since we are trying to achieve essentially a rate of correction that is consistent irrespective of speed, have the gain reduce as velocity increases.
4) Beware Nyquist limits! For instance the sample rate on the roll sensor needs to be such that at least two samples are obtained for each revolution of the airframe, or the simplest form of the math will conclude the rocket is rolling in the reverse direction, causing all sorts of control fun! The roll axis is of course the one with the most rapid maneuvering potential since the moment of inertia about that axis is smallest. You need a high sample rate on the sensors. If you can't get that, then need something like roll lockout if detecting roll that might be approaching Nyquist limits, or significant rates on any other axis. Lock out for a few seconds to allow the vehicle to stabilize itself, then resume control.
5) Be very careful to use an airfoil on the canard which has minimized deadband. If not, the control algorithm (1st order approximation; it is way more complex than this) needs to have a region +/- the neutral control position which it essentially skips over to initiate maneuvers or corrections. I would also advise to increase the stability margin of the rocket if a minimum deadband airfoil is not being used for the canards.
6) Design the control system for full servo travel to achieve full designed control surface deflection. This does two desirable things. (a) Increases the available torque for moving or resisting motion of the control surface. (2) Helps prevent outrunning your sensor system due to initiating maneuvers too abruptly.