What i suggest is precompute the rectangles and the hotspot.
The rectangles can be calculated when added or moved. The hotspot can be independently calculated from the paint event. One way is when the data is streamed calculated and the draw just reference the calculated spot. You can put it on a different thread that way the calculation is not blocking the drawing.
Other way is to start the hotspot calculation on the beginning of the paint event but put it on a different thread then after the shapes are draw wait for the thread to finish the calculation then draw the hotspot. That way you can merge the shape drawing time whit the hotspot calculation time.
Try using the graphics drawing methods like drawEllips, DrawPolygon, DrawLines. Way faster then calling it by pixel by pixel. (i could be wrong about the drawing pixel by pixel but from the code that what a get)
Try using less function call from the paint event. Each function call can add time (not much but can help some times).