We have a lottery for M3, whereby we all sit in a room (there are only 30 of us) and pcik numbers for each round. We only do cores this way. All electives are self scheduled provided preceptors are free (not usually a problem). First round you can only pick something for slot 1, and if you aren't doing something in slot 1, then you don't get a number. Second round opens up everything and we all draw numbers again. However, there are interesting rules like once someone picks OB in block Y, for instance, the minumum number of required students has to be reached for OB in that block before someone can pick OB in block X. Minimums range from 2-4. We keep picking numbers until everyone is done (theoretically 6 times since we have 6 8-week blocks, but there are a couple 4 week rotations so it takes more than 6 rounds).
For M4 we just write out our desired schedule and hand it in. Again, the only real competition is for the core clerkships (and most people only have 1 or 2 left for M4). Very rarely are there conflicts with electives. M4's have priority over the M3's for cores.
It works out fine for most people. I know some people who had complaints last year, but once they are "living" their schedule this year, they see it really doesn't matter. I "took one for the team" and switched my OB and peds rotations, but it really didn't matter in the long run.