Nina — As I said, I only double-encode U+00AD in case there is a validation tool that needs the codepoint in order to permit indication of certain codepage coverages. I suspect, as John does, that it doesn’t actually matter what’s in the font or not.
My preferred approach to U+00AD softhyphen is the same as U+00A0 nbspace — which is to say, I prefer to double-encode them with their default references hyphen and space.
These two are unique characters whose distinct properties I feel should be properly handled at a higher level than the font: the discretionary character of the softhyphen and the non-breaking character of the nbspace are characteristics that should be managed at the layout level. The glyphs themselves should be the exact same as the hyphen and space in every other way. I would guess that the fact that they are encoded at all is a legacy residue.
In practical reality, I believe most most modern apps treat them this way. If these codepoints are not present, then the renderer should use the U+002D hyphen and U+0020 space. In some apps, the renderer does so regardless. However, in some apps, the renderer uses the mapped glyph if the 00AD/00A0 codepoints are actually present. And if the glyphs differ from the 002D/0020 glyphs, then unexpected behavior can happen.
If you double-encode then you don’t need to be concerned with .case versions of U+00AD, since the hyphen glyph will be utilized and still be a proper target for any existing relevant GSUBs.
I wouldn’t even really bother with the codepoints in <cmap> except that I suspect there are a number of validators that would flag a font as not supporting various legacy codepages that include these codepoints (especially U+00AD) if these codepoints are not in fact present.
As such, I generally draw it as a nominal em dash — i.e., I make it a full em wide with zero sidebearings (which is not typically how I draw my emdash U+2014 these days).
In fact, I have a simple script that just creates the horizontalbar glyph with a width from f.info.unitsPerEm, reads the thickness and vertical position from the bounding box of my emdash, and draws the relevant rectangle. Never give it a second thought. ;-)