as stefan notes, altitude readings of many mobile devices are not very good. who knows what the bike display uses, but in this case it appears to be much closer to reality than the app.
better cycling apps have some options for whether to use the altimeter, GPS, or a combination of those and mapping data to track elevation, but i don't think the specialized app has any choices.
your out and back route on Leif Erikson is around 1,100 feet of elevation per strava, and around 1,300 feet per rideWithGPS, both of which use USGS or other contour maps to determine elevation. it's likely apple workout/maps is using something similar (your 987 foot value) and the bike computer appears to have gotten it basically right.
the 2,451 foot value from specialized is simply completely wrong, indicating that they're likely using only altimeter or only gps, either of which is very very inaccurate. GPS elevation is horrible, and altimeter doesn't work if the air pressure goes up or down much during the ride. using the two together can give a decent result.