Take a look at `--rebase-merges` if you haven't. It's new and kind of amazing. Works much better than `--preserve-merges` in my experience.
I did not know about rebase-merges!
> The --rebase-merges mode is similar in spirit to --preserve-merges, but in contrast to that option works well in interactive rebases: commits can be reordered, inserted and dropped at will.