I've done this in a few of my small add on mods.
In my autosave mod did it in two separate statements.
For loading in existing saved games, I just did
IF
SavegameLoaded(_,_,_,_)
AND
DB_IsPlayer(_Player)
AND
NOT DB_HasBSBall(1)
THEN
DB_HasBSBall(1);
ProcBSBallToInventory(_Player);
I've always had to attach a PROC to it, to make the transfer actually take place. I assume this is a timing issue of some sort or perhaps an issue with my goal structure. But either way using a PROC after the SavegameLoaded event does the job.
For a new game, I take the easy way out and use the first autosave trigger. You basically can't miss it. And even if the player fails to hit that trigger somehow, you'll still get the item on first reload.
IF
CharacterEnteredTrigger(_Char,TRIGGERGUID_S_TUT_LowerDeck_AutoSave_88dbb8e6-47d3-4d6c-adb4-6c5039bd5a09)
AND
NOT DB_HasLamp(1)
THEN
DB_HasLamp(1);
ProcLampToPlayer(_Char);
Those are actually from two different mods of mine but you get the idea, just replace the DB/Proc info to match for both of them and write the Proc after both.
I had to use the Player DB for the loading one, because otherwise it's harder to find the character GUID to send it to.