I think I've made as good an argument as I'm going to. It basically boils down to:
* if the keys are bound, it's quicker to call mark-foo-forward and then mark-foo-backward than to call mark-foo, then exchange-point-and-mark, then mark-foo again.
* This behavior is simpler and more predictable: mark-foo-forward always marks forward. mark-foo sometimes marks forward and sometimes backwards. The complexity of the various mark-foo functions can be seen in how many cases the docstring has. The behavior of the mark-foo-forward, mark-foo-backward functions can be gathered from the name, without reading the docstrings.
I understand we have different opinions, so if this isn't convincing, I'll bow out here. Thanks.