Internally, new ISODate
really means:
Date.UTC(year, month, date, hour, min, sec, ms);
IE, MongoDB splits up the string into elements with a regular expression (Line 60 at https://github.com/mongodb/mongo/blob/master/src/mongo/shell/types.js#L56)
The JavaScript Date object has a few different initialisers (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax). If you use:
new Date("0001-01-01T:00:00:00");
Then the four digit year 0001
is not parsed or interpreted, but when you use it like MongoDB does:
Date.UTC( parseInt("0001") )
Then special rules apply for the years 00-99 apply. The docs at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Date_instances slightly hint at this.
There is a MongoDB server ticket already at https://jira.mongodb.org/browse/SERVER-8164, please vote for it.