You don't need the exchange-point-and-mark calls. As a part of the Emacs commandloop, deactivate-mark is checked after executing your command, `rs'. As long as you prevent your buffer modification code from setting `deactivate-mark' to not-nil, the region should be active.