TextRenderer.MeasureText method is a nasty one -- it changes the actual string passed as parameter, so it's changing the actual string referenced by the DataGridView. It actually makes a .Net string mutable.
It also seems that this ridiculous method doesn't change the actual Length of the string, but merely overwrites one of the characters with \0 to indicate the end of the string (like null-terminated strings in plain C). That's some funny stuff!
This can have a serious impact on the stability of your app. If you take into account that .Net uses string interning, you can start getting all sorts of weird results, as you did notice that your string constants no longer seem constant.
First step is to create a copy of your string (a new instance with same characters):
string Path = String.Copy(e.Value as string ?? "");
instead of
string Path = (string)Row.Cells[1].Value;
This will ensure that no matter what TextRenderer does, original string will remain unchanged.
After that, you need to get rid of the null-character in the modified string.
By doing this:
if (Path.IndexOf('\0') >= 0)
e.Value = Path.Substring(0, Path.IndexOf('\0'));
else
e.Value = Path;
you will create a new instance of a clean, modified string (leaving our temporary Path copy unreferenced for garbage collection).