1. Is this a bug or a feature?
My opinion is that it is not a bug. Different selections yield different inputs, so different outputs are at least possible. On the other hand, I'm not sure I would call it a feature. It strikes me that users will wonder why they cannot easily get an image of what they see.
"Save Selection As..." seems to consistently show the results of NotebookRead[]. There are (at least) three forms of output from NotebookRead[], a box expression, a complete Cell or a list of cells, or a String. Each type is packaged into a Notebook that is then exported.
Examples of the three forms are shown below. The first is the selection of the contents of the output cell of CharacterRange["a", "c"]. The second is the selection of the whole output cell. The third is the selection of the number 123 in an input cell.
Note that a box expression is put in a cell with no style. A complete Cell is passed as is. And note that a String, such as 123, is automatically formatted as "Text".

In this regard, @Carlo has it right, that when only the contents are selected, we lose the information that the style is "Output".
It is not clear to me why, assuming it is intentional, saving a selection from the contents of the cell does not automatically inherit the cell style of the enclosing cell in the notebook expression that is exported. There could be issues if the selection was inside a inline cell I suppose. For instance sometimes Mathematca interprets actions, such as when an input or output cell is pasted inside an input cell. The expression is pasted, not the cell, whereas pasting a text cell in an input cell yields an inline cell.
2. Workaround?
I don't have a general solution. One might add something to KeyEventTranslations.tr or to MenuSetup.tr to select the cell. If nb is the notebook with the selection to be saved, the following
SelectionMove[nb, All, Cell]; FrontEndTokenExecute[nb, "SelectionSaveSpecial"]
Other programmatic approaches seem possible, such as styling the selection with the cell's style. I could not discover a way so that the menu command would do this.
ToExpression[CharacterRange["a", "z"]]? $\endgroup$