Again, read the documentation. You're already using the ContentBounds property. The documentation for that property provides the answer to your question:
The returned rectangle reports client coordinates, in pixels.

This property calls the GetContentBounds method to get its value. For the base DataGridViewCell type, this value is Empty.

To get the bounding rectangle of the cell rather than the cell contents, use the DataGridView.GetCellDisplayRectangle method.
The answer was there the whole time but you just didn't look. You won't be able to answer every question by reading the documentation and forums like this are great when you've looked but can't find, or can't understand, what you need. The documentation should ALWAYS be the fist place you look though. You'll often learn things you weren't even looking for too. I speak from my own personal experience.