Strings are fine, but I'd specify the "round trip" O format to ToString. This ensures that it can be serialised/deserialised to/from a string without the time offset being misinterpreted:
using System.Globalization;
string now1 = DateTime.UtcNow.ToString("O");
// .. Write "now1" to registry
Console.WriteLine(now1);
// Read "now1" from registry
DateTime now2 = DateTime.Parse(now1, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
Console.WriteLine(now2.ToString("O"));
You don't need to specify CultureInfo.InvariantCulture or DateTimeStyles.AdjustToUniversal to DateTime.Parse. These just ensure that the format of the string is assumed to be culture invariant & that the resulting DateTime instance has a Kind of Utc.