Made a quest test. There's no way your method shouldn't work.
I made a small quest with 3 stages.
0 (start up)
5
10
My Objectives are just two indexes.
0 = "I need to find an item". This item being an alias that is created at the player's position on start up.
10 = "Find another item". This comes up when said item is found.
The script I used is similar but different functions used:
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) GetOwningQuest().SetObjectiveCompleted(0) GetOwningQuest().SetCurrentStageID(10) ; The new objective will be displayed in the stage fragment. EndEvent
Stage 5: SetObjectiveDisplayed(0)
Stage 10: SetObjectiveDisplayed(10)
When item is picked up/added, Stage 10 is called.
So check out how your stages and objectives are set up.