You analysis of what it looks like seems to be exactly right. I think it must be a bug. A (sort of ugly) workaround is to removed the unstyled points:
ListPlot[Style[{#1, #2}, PointSize[Abs[#2]/50], Hue[#2]] & @@@
data] /. Point[{{_, _}, {_, _} ..}] -> {}