As R.M already indicated both methods are completely different. EdgeDetect uses gradient based methods, which detect areas in which gradients change sharply. This works nicely on grayscale and color images, as gradients are easy to define there. The basic parameter here is the scale of the gradients that are taken into account.
MorphologicalPerimeter on the other hand, uses a strictly binary approach as explained by R.M. So, how can it work on grayscale and color images then? Well, simple, it uses Binarize or something equivalent internally. You can see that the parameters of Binarize and MorphologicalPerimeter behave identically:

The basic parameter of MorphologicalPerimeter is the threshold, which is principally different from the gradient scale of EdgeDetect.
That EdgeDetect and MorphologicalPerimeter are not identical, even in your "figure 8" example where they seem similar can be easily determined using:
ImageData[MorphologicalPerimeter[Graphics[Style[Text["8"], 400]]]] ==
ImageData[EdgeDetect[Graphics[Style[Text["8"], 400]]]]
(*
==> False
*)
In the zebra example MorphologicalPerimeter can output more than a black image if you tweak the scale parameter:
