I’m guessing here, but it looks to be the difference of which overloaded call you’re hitting; String.Format has multiple.
In the first example, it would make sense you’re hitting String.Format(string,object).
In the second example by providing null you’re most likely hitting String.Format(string,params object[]) which, per the documentation, would raise an ArgumentNullException when:
format or args is null.
If you’re running .NET4, try using named parameters:
String.Format("Another exception occured: {0}", arg0: null);
Why is it hitting the params object[] overload? Probably because null isn’t an object, and the way params works is that you can pass either each value as a new object in the call or pass it an array of the values. That is to say, the following are one in the same:
String.Format("Hello, {0}! Today is {1}.", "World", "Sunny");
String.Format("Hello, {0}! Today is {1}.", new Object[]{ "World", "Sunny" })
So it’s translating your statement call to something along the lines of:
String format = "Another exception occured: {0}";
Object[] args = null;
String.Format(format, args); // throw new ArgumentNullException();