It's not limited to any specific API version, it can happen with a 1.0, 2.0, or 2.1 script, in any script type. What seems to happen is that the first record of a specific record type that a script instance creates reserves a block of 100 ids for that script instance, causing the next record created by any other means (manual, SuiteTalk, CSV import, other script or other deployment) to be at least a hundred higher. With Map/Reduce scripts, you have multiple queues going at the same time, essentially acting like multiple deployment of a scheduled script. Each queue will reserve and use up ids in blocks of a hundred.
But, the thing to note is that internal ids are not, and never can be, guaranteed to increase sequentially in the order of record creation. All that NetSuite guarantees with internal ids is that they are unique. They are not supposed to have any meaning, they most definitely cannot be used to determine sequence or order of creation.
It's best to pretend that even though the internal ids are numbers and generally increase over time, that they have no meaning, and might as well be random. Even switching to a scheduled script will not help, because if someone manually creates a record while the script is running, or a CSV import creates records while the script is running, you will have the exact same problem. You won't be guaranteed not to have gaps or to have the internal ids order by creation time.