The reason is that the feature list is showing a localized version of the display name - so depending on the language of the site, the name of the feature displayed will be different than the display name the object exposes.
So, how to get the full display name? the SPFeatureDefinition
object has a function called "GetTitle", which, when specifying a language, will return the full name of the feature. The following code sample loops over all features installed in the local farm, and using the English locale:
CultureInfo locale = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(def.GetTitle(locale) + ":" + def.Id.ToString());