It looks like the key deletion needs a bit more checking first. You're deleting all the keys even if they already conform to the capitalization rules. Try running a hash through your functions twice in a row. I think you'll be surprised at whats left...
use Data::Dumper;
my $hash = {dog=>'cat',PIG=>'cow'};
print Dumper $hash;
force_uc_hash($hash);
force_uc_hash($hash);
print Dumper $hash;