Alright so for some reason, the rotation angle is also based off of the initial shape of the dot. These dots started out as circles and were stretched into ellipses from the rotation formula.
float $newx = $fx * cos($rad) + $fy * sin($rad); //switch to -/+ to change which was on top
float $newy = $fx * sin($rad) + $fy * cos($rad);
float $newx = $fx * cos($rad) + $fy * sin($rad); //switch to -/+ to change which was on top
float $newy = $fx * sin($rad) + $fy * cos($rad);