Observed via code inspection, I believe the following is a typo, in Moose.pm line 165 ff:
unless ( $meta->isa("Moose::Meta::Class") ) {
my $error_message = "$class already has a metaclass, but it does not inherit
$metaclass ($meta).";
I believe the condition in the first line ought to read: $meta->isa($metaclass). Usually won't
cause a problem, since usually $metaclass eq "Moose::Meta::Class".
The failure mode: If the class already has a $meta that does not inherit from the new
$metaclass, the current code will happily ignore the new $metaclass. For example, if My::Meta
and My::Meta2 both extend Moose::Meta::Class, and if I create a class with My::Meta, then call
init_meta with metaclass => 'My::Meta2', init_meta will silently ignore my request to initialize
the metaclass.