In your first example, you are hitting Format(String, Object), which looks like this when disassembled:
 public static string Format(string format, object arg0)
 {
    return Format(null, format, new object[] { arg0 });
 }
Note the new object[] around that.
The second one, you are apparently hitting the Format(string, object[]) usage, at least that is the one being invoked when I perform the same test.  Disassembled, that looks like this:
 public static string Format(string format, params object[] args)
 {
     return Format(null, format, args);
 }
So all of these actually get funneled to Format(IFormatProvider, string, object[]).  Cool, let's look at the first few lines there:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
    if ((format == null) || (args == null))
    {
        throw new ArgumentNullException((format == null) ? "format" : "args");
    }
...
}
...welp, there's your problem, right there!  The first invocation is wrapping it in a new array, so it's not null.  Passing in null explicitly doesn't make it do that, due to the specific instance of Format() that's calling.