The documentation for clone states:
Returns a clone (new instance) of this Data::Money object. You may optionally specify some of the attributes to overwrite.
Problem is, it doesn't completely clone the object, it leaves the internal value empty and as such falls back to the default of '0' if not value is passed in the parameters.