Hi Bart,
it is hard to help without an oml, so a tip for you to do in your oml : add a console.log displaying the event name and all relevant values in each of your screen and block events and in each spot you do something with the structure or json, and see if you can deduce from that what is going differently than you expect.
you will see for sure when the onParametersChanged did or did not fire, and wether it was after or before screen events were fired, etc. Maybe you'll discover that the OnParametersChanged is called after all, but some logic error inside it happened.
Ideally, you capture also the other events that you haven't attached any handler too, like the OnInitialize and OnReady and so on of the block, so you actually see first an empty json string being passed, and later at some point a filled one. Because this is one scenario I can think of : the JSON string was filled like this right from the beginning and then obviously there will not be a ParameterChanged fired.
Dorine
On a side note : I find it odd that you do something with the parameter in an parameters changed event, but not initially. I feel that somehow same logic should be executed once at the beginning of the lifecycle of a block (such as in the onReady) I.e. if that block's local variable should always represent whatever is passed into that input json, you create a window of time that this is not the case, to me that feels like your design is fragile, because you are relying heavily on your expectation that the parametersChanged will happen somewhere in the beginning of the block's life.