My guess is that you have several master objects around. Known to happen when one uses replace_master, but I think I've seen it in other cases too. There ought to be only one of course, but with replace_master it's not easy to get rid of all references to the old one (it's practically impossible), so the best one can do is to try to make them reference the same data and hope noone notices the difference. :\
For starters I think it's best to find out if that's the case. I usually add something like this to _sprintf when I need to tell objects apart:
protected idnumber = ++all_constants()->asdfdsaf; string _sprintf (int flag) { return flag == 'O' && sprintf ("MyClass()[%d]", idnumber); }
The one in dump.pike looks like something else, though. The ENCODE_DEBUG output prior to it might give a clue.