After some digging with Werner the theory is that libgcj_bc1-gcc48 present on the system made the update apply at all (it provides libgcj_bc1) and then things went downhill, also installing the rest of the gcc6 runtime (which wasn't present on the system). I suppose if a patch applies then all packages in that patch are installed, not just those that are update candidates themselves. This suggests that gcc updates should be split, otherwise somebody having just gcc installed will get gcc-c++ installed on update for example?