Mace, it doesn't always "take hold" instantaneously from what I remember.
I get what you're after, which is why I only check the main inventory (worn, and consequently cursor rather than all slots).  I also put the item numbers you want to check for in a declared array so that you may add to it in perhaps a more easier to understand method.  I also have it check how many elements are in the array as a "total number of armor to check for", so it's easier to scale (as in grow, increase, etc.).
Try this debugging version:
	Code:
	sub EVENT_SCALE_CALC {
	my @checkarray = (1804..1810);  ## denotes a range between 1804 to 1810 - could also have (1804,1805,1806,etc.) to as many as you want
									## since we check how many are in the array later
	my $worn = 0;
	foreach my $itemtocheck (@checkarray) {
		if (CheckForItem($itemtocheck) {
			$worn++
			quest::say ("".$worn." total worn items at this time.");
		}
	}
	$questitem->SetScale($worn/(scalar @checkarray));
}
sub CheckForItem {
	## Check only main inventory/cursor (we want these pieces to be worn to count right?
	for ($slot1=0; $slot1<=30; $slot1++) {
		$itemid1=$client->GetItemIDAt($slot1);
		if ($itemid1==$_[0]) {
			quest::say ("Found item: ".$_[0]."");
			return 1;
		} else {
			quest::say ("Did not find item: ".$_[0]."");
			return 0;
		}
	}
}