The problem with this is that `$(...)` expands into stuff, and then whitespace splitting is applied to that, so it's not just one argument. You could add quotes to fix it:
`ISSUE_DESCRIPTION=$(json_escape "$(tail -n +2 "$TMPFILE")")`
(`$()` is magical in how you can nest quotes and they work as you intend).

However, the better way is to skip the cheezy `echo "$1" |` in the implementation of json_escape above, and instead pipe tail / head output to json_escape, so here it would be:
`$(tail -n +2 "$TMPFILE" | json_escape)`