I discovered my problem was in calling new() on an object that already existed in the tied hash and thus overwrote the stored information. I fixed it with the following very simple code. Damn I've been banging my head over this one. Feel so stupid! :)
sub set_items { $_[0]->{_items} = $_[0]->{_items} || Order->new() }
Thanks again everyone!