Turns out that CAAnimationGroup executes animations concurrently, not serially, which I would've known if I had read the docs.
Actually supports UIAppearance, shows it off in the example.