sed -E ':a;s/([^"]%[^"])/\1^%/;ta' <<< 'r%"%a"%n"%d%"o%"%%m'
This command uses a loop to repeatedly search for % outside of quotes and replace it with ^%. Here's a breakdown of the command:
-E: Enables extended regular expressions. :a: Defines a label a for the loop. s/([^"]%[^"])/\1^%/: Searches for % outside of quotes and replaces it with ^%. ta: If a replacement was made, jumps back to label a to continue processing. This will transform your input string r%"%a"%n"%d%"o%"%%m to r^%"%a"^%n"%d%"o^%"^%^%m.