I’ve recently added a description to the send service basically quoting your post I think of this service more like a debug tool. Sending values to the bus ExposeSensor is the way to go for me.
The last update to cover that could have changed things was in Mar 2018. I have no cover device myself so I can just take guesses here.
From the HA cover template the behaviour you are describing is correct (but seems counterintuitive for me too):
class CoverDevice(Entity): """Representation of a cover.""" @property def current_cover_position(self): """Return current position of cover. None is unknown, 0 is closed, 100 is fully open. """ pass