With a bit of trial and error I got this to work. jstangroome is right the params are always passed in as strings however when I passed in a string with new line constants in it:
<ScriptParameter name="StringVar" value="Key1 = Value1 `n Key2 = Value2" />
they were not picked up correctly in the script. So I was unable to convert them to a hash table like so.
$HashTableVar = ConvertFrom-StringData -StringData $StringVar
So I ended up doing a hack and replacing the new line with a comma to pass it in to the script. Then once in the script I replaced the comma with the new line again and then fed it into the conversion and it works
<ScriptParameter name="StringVar" value="Key1 = Value1,Key2 = Value2" />
$HashTableVar = ConvertFrom-StringData -StringData $StringVar.Replace(",", "`n")