BUG: Keep original values when taking with a new fill value
- [x] closes #55181
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [x] Added an entry in the latest `doc/source/whatsnew/v2.2.0.rst` file if fixing a bug or adding a new feature.

`SparseArray`'s `take` method could mix up the two possible fill values: the array's fill value and the `fill_value` argument provided to `take`. In the case of a non-empty sparse array whose values were all its fill value, `take` would ignore the array's fill value and only use its `fill_value` argument, even for valid indices. The return value would be all `fill_value`, rather than a mix of the two fill values.

Thanks @rob-sil 