The CellPainting method is called for every single cell that is to be (re-)painted. Therefore e.CellBounds returns the bounding rectangle of the cell that is currently painted.
As you have 3 cells in your list, you tell to draw it 3 times.
Try removing the 2nd and 3rd Point from the list:
GeneralCourseWithHours.Add(new Point(info.RowIndex, info.ColumnIndex));
GeneralCourseWithHours.Add(new Point(info.RowIndex, info.ColumnIndex + 1));
GeneralCourseWithHours.Add(new Point(info.RowIndex, info.ColumnIndex + 2));
You are specifying the width (3 cells) anyway in the CellPainting-method:
rectDest = new RectangleF(e.CellBounds.X, e.CellBounds.Y,
e.CellBounds.Size.Width * 3, e.CellBounds.Height);
Hope that helps!