It's quite clear that the 6502 version of Microsoft BASIC at all levels uses substantially the same structure and technique as the earlier 8080 and 6800 versions. As has been pointed out in various places on this site and elsewhere, this came at a noticeable cost in efficiency. As just one example, supercat mentions:
...if program lines and strings had been stored in reverse order, that would have made a lot of things more efficient on the 6502, since code to iterate through a string could simply output (stringPtr),y and decrement y until it hits zero, rather than having to check each index against the string length.
This no doubt was inefficient not only for speed but also for space, which was a known problem with the 6502 version. "8K BASIC" for the 8080 and 6800 did indeed run in an 8K RAM system (albeit leaving little room for a program) and easily into an 8K ROM. Despite all efforts, the code for "BASIC M6502 8K VER 1.1" came in at about 9 KB. (MS lost a sale to Atari due to the size; in 1978 Atari tried to squeeze it down to 8K, failed, and contracted out to Shepardson Microsystems for a new BASIC that did fit.)
What would cause them to code it this way, rather than optimising for the rather different architecture of the 6502?
Note: If you come across further particularly good references for the efficiency issues of the 6502 version, feel free to mention them in the comments or even edit them into this post.