SOAP is not a "mini match". Instead, only programs submit lists, and as you said offers are sent to the top X people on a program's list where X = the current number of unfilled spots.
This does favor those with "better" applications. If you look at this thread, you'll see that some people got 4+ offers in the first round, then picked one and turned down the rest. Others got no offers -- but presumably might get offers in later rounds as the 1st round people reject offers. This is why the main process is run as a match -- avoiding these multiple rounds and rejections (plus avoiding the possibility that taking an offer in an early round might "lose" a better offer in a later round -- a match addresses that issue completely).
But, not always. Remember that a program's strategy in SOAP is not necessarily to rank people based upon how "good" they are (which would be the dominant strategy in a match), but rather on some combination of how good they are + how likely they are to come to that program. So, if I had one spot open and had a superstar apply for it but thought they might pick somewhere else (or another field), I might pass on them and rank someone else who I thought was more realistic -- as if I go for the superstar and they turn me down, my next pick(s) might already have accepted offers from other programs and be gone.
All that said, a SOAP like process is probably the best possible given the timeline available.