The lower you are on the ladder, the more probable it is to be matched with a higher skilled opponent. At the same time, this loss will result in a lower ELO adjustment. I am not a computer scientist, but shouldn't the ELO system fix this scewed distribution by estimating the win chances before the game? I always though that this is how it works.
I think the way that the match maker works is that it tries to find games for you with people within a certain range. My guess is that it's something like 0-30, 31-100, 101-300, 300-1000, 1001-3000, You'll get matched quickly if there are enough people in your range. If you don't find a match within a certain length of time, it starts opening up the range. It seems like it is more focused on making sure that people can get games instead of waiting forever. It's a somewhat valid point, as waiting 30 minutes to find a game would bother the legions of casual players more than the mismatches.
I have had active ranks from 17 to 3000+ at the same time. On the 4v4 team that was ranked in the top 20, if we got a match right away then it was another well-ranked team. If the search went a long time, we knew we were going to get worse ranked players.
I don't know how ELO gets adjusted after a match. I don't know what my actual ELO number is, I just see the change in ranking from one game to the next so I can't tell how it makes the changes. I'm sure there is an algorithm but there are too many variables to guess at how it works.
I do think it would really help if Relic introduced Ranked and Unranked like many other online games have. I'd also like to see it so that in order to play ranked, you would have to beat at least a hard computer in a 1v1, or something to that effect.
The other improvement that I'd like would be to give new teams a elo rating based on either the average elo of each individual or their best ELO.