The trouble with all of them is that the MPU model is awkward when combining: (1) applications that access more than 64K of RAM, and (2) memory protection.
In the case of the 80286 and MS-DOS it was particularly bad because applications were not allowed to change the segment registers so you would have to make OS calls to switch segments. 8088 users were already used to running application that used more than 64k and they weren't going to go back. (An interesting possibility would be that the 286 supports 4 segments so you could have two data pages, a stack page and a separate code page that are all 64k.)
With CP/M on the other hand there was no expectation that applications need more than 64k so you could build a powerful multitasking OS that has a rich userspace. (In fact there was MP/M back in the day) The source code of CP/M is available now and if you put ZCPR3 on it feels like a mainframe.