I think the problem is that %Bubba:: = %Hubba:: is creating a new hash, which destroys the binding of $Bubba::abba to the original hash set up at compile time of the latter expression. This reasoning is based on the observation that both of the following work fine:
#!/usr/bin/perl
use strict;
$Hubba::abba = "zappa\n";
%Bubba:: = %Hubba::;
# compile time deferred
eval 'print $Bubba::abba';
#!/usr/bin/perl
use strict;
$Hubba::abba = "zappa\n";
# copying via hash slice doesn't create new hash
@Bubba::{keys %Hubba::} = @Hubba::{keys %Hubba::};
# or: @Bubba::{keys %Hubba::} = values %Hubba::;
print $Bubba::abba;