Strava explains their process for estimating elevation, and the reasons why data differs for riders on the same ride and route.
Supposedly Strava pools user data from devices that estimate elevation, and correlates it against existing databases.
I'm using an iPhone 4s with Strava, Cyclemeter and other apps. It doesn't have a barometer and I'm not sure whether any cycling apps use the accelerometer or other sensors. I'm guessing only GPS is used.
Since GPS sync errors occur fairly often I figure that accounts for the variations I see between rides on the same routes. One 20 mile route I ride often has approximately 1,000 feet of elevation gain but it varies from 900-1,100 on different rides, along with the distance.
When I mouse over the graphs I can see spots where GPS sync errors occurred. There will be sawtooth or flat spots, and improbable speed estimates (30 mph where I know there's a climb that I never manage to ride faster than 12 mph). Cyclemeter tends to interpolate this missing data more accurately, especially when GPS sync errors persist over longer distances.
My guess is that GPS sync errors occur more often in some areas -- valleys, thick foliage, underpasses, etc. Some devices handle it better than others. Over long distances errors accumulate.
Strava in particular seems erratic in estimating data. For example it will show my speed on a particular segment at, say 14 mph, but when I use the mouse to drag over the same segment it'll show 16 mph. And Cyclemeter may show 15.4 mph for the same segment. But when I upload the Cyclemeter data to Strava it may come out as 13.7 mph.
Who knows. I consider this stuff useful only as an approximation of my progress over the same routes over repeated rides. Any single ride out of context may be wildly inaccurate.