The default behavior dynamical updating system of Manipulate is to change certain settings that tend to speed up a computation when a control is being actively manipulated. For instance, it sets $ControlActive to True and $PerformancGoal to "Speed" For plots, this lowers the number of points of the graph computed by lowering MaxRecursion to 0. For other plotters, PlotPoints might be lowered, but that does not seem to be the case.
One can override the default in either of the two ways:
Manipulate[
Block[{$PerformanceGoal = "Quality"},
ContourPlot[a x^2 - 2 x + a y^2 == 0,
{x, -0.2, 4.}, {y, -2.1, 2.1}]
],
{{a, 1.}, 0., 2.}
]
Manipulate[
ContourPlot[a x^2 - 2 x + a y^2 == 0,
{x, -0.2, 4.}, {y, -2.1, 2.1},
MaxRecursion -> 2],
{{a, 1.}, 0., 2.}
]
Both methods work fast enough in this case. In general, one can exercise finer control by using $ControlActive:
MaxRecursion -> If[$ControlActive, 1, 2]