See the specification. It is complicated. You must quote arguments that have reserved characters (a long list) but only with double-quotes. So your command is effectively currently passing 'cd as the 2nd argument to bash;. Also && is not inside double-quotes, and so it generates an error.
I don't use gnome so cannot test this, but the spec says
you must escape characters "`\$ inside the string, and(and you must escape % by %% if you don't want to use a field code as you do), so you could try something like
bash -xc "cd \"\\$(dirname %%k%k)\" && bash ./patch.sh && bash -c \"read -n1\""
The spec could do with a few concrete non-trivial examples.