That's because list initialization and assignment initialization are not the same.
in other words, the second statement is interpreted as
Number n(5); // -> construct n using Number(int) constructor
Number m = 5; // -> implicitly convert 5 to Number and initialize m with the resulting temporary
but only after validation, of course; i.e. an explicit constructor is not allowed. Besides, the implicit conversion could also use a conversion operator, i.e.
Number m = Number(5);
could be interpreted as
Number m = someSpecialNumber;
Number m = someSpecialNumber.operator Number();