This answer is similar to @Edmund's, except with the rotation angle dependent on the radius:
pts2 = Table[
Table[{x Sin[t], x Cos[t]}, {t, 0, 2 \[Pi]π, \[Pi]π/(2 x)}], {x, 1, 8}];
a = Table[VectorPlot[{vx[x, y], vy[x, y]}, {x, -2 \[Pi]π, 2 \[Pi]π}, {y, -2 \[Pi]π, 2 \[Pi]π},
VectorPoints -> (Flatten[Table[RotationMatrix[\[Phi]Flatten[Table[RotationMatrix[ϕ/x].# & /@ pts2[[x]], {x, 1, 8}], 1])], {\[Phi]ϕ, 0, 2 \[Pi]π, \[Pi]π/20}];
Export["vectors.gif", a]
Edited to include an updated version in which it's easier to adjust the parameters:
numcircles = 20;
circlespacing = .5;
pointspacing = \[Pi]π/4;
frameinterval = \[Pi]π/20;
pts2 = Table[Table[{x Sin[t], x Cos[t]}, {t, 0, 2 \[Pi]π, pointspacing/x}], {x, 1, numcircles, circlespacing}];
a = Table[VectorPlot[{vx[x, y], vy[x, y]}, {x, -numcircles circlespacing, numcircles circlespacing}, {y, -numcircles circlespacing, numcircles circlespacing},
VectorPoints -> (Flatten[
Table[RotationMatrix[\[Phi]Table[RotationMatrix[ϕ/n].# & /@ pts2[[n]], {n, Length[pts2]}], 1])], {\[Phi]ϕ, 0, 2 \[Pi]π - frameinterval, frameinterval}];