Hi Andrew,
Short answer: there's not really a quicker solution that I've seen. We have discussed ways to make this better, such as to have Rundeck serialize Job definitions to XML on disk when changed in the GUI (similar to Jenkins), and have some kind of hook that can help manage those files in source control.
for your item #2, can you file an issue? It would be better if we make the xml output as canonical as possible to assist when doing textual diffs.
It is possible to remove all jobs in a group, you can use "rd-jobs purge" command, which will delete jobs matching a query (e.g. -g "group/path")
If I was starting from scratch i might have a directory structure matching my rundeck groups, and have each job in a single file "name.job.xml". Then to load all I would do something like "find ./jobs -name "*.job.xml -exec rd-jobs load -f \{\} \;" to load them. On the export side, I would either use the API or "rd-jobs list" to get the ID and group/name of each job, and export each one to the right filepath. Renaming/moving jobs would have to be handled manually somewhat.