Warning: Very Nerdy Discussion follows. You were warned.
The delay from ROL lists to Match day has nothing to do with how long the match takes to run. As mentioned above, the match itself probably takes less than 2 minutes to run. The plain match is a straightforward algorithm -- it is very deterministic and straightforward, and is a linear problem. No matter where you start, you'll end up with the same answer.
But the match has several aspects that make it more complicated -- couples, reversions, and odd/even limits. You all know about couples. The problem with couples is this: if the match algorithm is working on your match list and tries to match you into your #1 rank and it's already full with people who were ranked higher than you, then it moves on to your #2. There's no way (in a plain match) for there ever to be a chance of a spot opening for you, since the only thing that could happen is someone even higher on the rank list getting a spot, and bumping someone else out. But, a couple's match changes all of that -- if someone who has "tentatively matched" to your #1 spot is couple's matching with someone and their partner is bumped out of their tentative match, then they will move on to the next spot on their list, so it becomes possible that you'd have to go back and check that a better spot hadn't opened for each applicant. This makes the match much more complicated (it changes it from a "P" problem to an "NP" problem, I think?). This can be addressed by running the match for non couple's first, and then the couple's at the end -- this minimizes the chances of collisions like this, but invariably the couple's matches themselves will collide and create problems like this. There's a very nerdy discussion here:
http://www.stanford.edu/~niederle/nrmpdesign.pdf
The second issue are "reversions". I have two programs, a Primary Care and Categorical. My match is arranged so that if the Primary care spots don't fill, they "revert" to the categorical. This means that if at the "end" of the match I have an open spot in Primary Care, my primary care quota is decreased by 1 (so now it's actually full), and my categorical is increased by 1. This then means the match needs to be run again, because now one more person can get into my program. And if that person (the next person on my list who ranked me highly enough) is matched somewhere else, then that list needs to be re-run, etc. And once all that is done, then you need to check for reversions again.
The third issue is odd/even limits. Programs have an option to limit themselves to only odd or even numbers of matches. This could be used to help with possible "part time" residencies -- I'd want to match exactly 2 half time residents, or have those two spots revert to 1 additional full time resident. This again mucks with quotas after the match is "run", and forces it to re-run again.
All that said, it still probably takes less than 2 minutes to run the whole thing, even including all of the above issues. So why all the time?
It's all prep and error checking. Making sure the data has all been entered correctly. I expect that if a list is de-certified at 8:55PM on the rank date and not recertified, the NRMP might contact those people to be sure it wasn't some sort of a mistake. They need to recheck all the ECFMG certification status for IMG's and withdraw any who are not ECFMG eligible. The match may not be run on the same system the website runs on, and the data would need to be transferred across (and then rechecked again). Then the match is run. Then everything is double checked -- there should be no way for anyone to get a higher match than they received. Then getting ready for SOAP, all the data tables, etc. Could it be done faster? Probably. But I'd rather it was done correctly.
To the poster above who commented that the couple's match was screwed up, that is not correct. The couple's match is integrated with the main match, so they are really the same thing. What you're thinking of is the AUA match that went horribly awry. There's an SDN thread about it here:
http://forums.studentdoctor.net/threads/urology-match-completely-screwed-up-this-year.175816/ What's really amazing is that the threads about it on the official urology match website have all been deleted (they left the threads in place, but deleted all of the posts).
SOAP is something completely different -- there is no match at all. Applicants can receive multiple offers and then pick from them. This results in a smaller number of people getting multiple offers, and others needing to wait a few rounds before they get any offer at all. This is exactly the problem the match was created to address. The NRMP feels that there isn't enough time to run a second match, hence we have SOAP (or we would have match day in April)