I wrote this circle-line intersection detection after http://mathworld.wolfram.com/Circle-LineIntersection.html, but it appears like it or I am missing something.
float D = p1.X * p2.Y * p2.X - p1.Y;
You've mixed up your operators on this line.