The other difference between String and string is that String requires "using System;" whereas string doesn't.
String belongs to .NET, where as string belongs to C#. So String is guaranteed to work in any language that targets .NET but not string.
Another difference, although I'm not sure if this is still the case, is that you can't use the class name as the backing type for an enum, you have to use the C# keyword (see https://social.msdn.microsoft.com/Forums/en-US/70b8b7f1-a561-4117-8c78-41880e723da2/enumeration-and-its-underlying-type-c?forum=csharplanguage).
There are two benefits to using the class name over the C# keyword:
1. You can copy the code and it'll work in any .NET language (as previously mentioned).
2. The class name is more descriptive. Compare Int32/Int16 etc to int and short, and Single/Double to float/double. The class name tells you how many bits are used for storage, and Double clearly uses twice as many bits for storage as Single.