Second, there seems to be a property whose value itself recurses, because I keep getting the same properties over and over after a short period of time
When you brought up your problem in the CB, I postulated that the reason you were running our of memory is that properties formed an infinite loop. You've just confirmed this.
The problem isn't in Data::Dumper. It detects loops in data.
$ perl -MData::Dumper -e'my $x = {}; $x->{x} = \$x; print Dumper $x'
$VAR1 = {
'x' => \$VAR1
};
The problem is that Win32::OLE doesn't do such checks. When it receives an object, it create a new Perl object to serve as a bridge. Data::Dumper correctly thinks this is a different object, so it proceeds to dig deeper.