Macros have special rules for how the parameters are interpreted/tokenized. When you say you only want one "token" passed to Arg1, it splits |('C4'=5)| into several tokens, with only the left parenthesis being the first token and "C4'=5)" being the second token. Same thing happens if you try to pass in negative values.
A workaround for this is to change how the parameters are passed. Two solutions are to use !CMDEND, (since there are no other tokens) or !ENCLOSE. (Another option would be to pass the parameters as quoted strings and use !UNQUOTE within the macro.)
DEFINE TEST2 (Arg1 = !CMDEND)
RECODE unit4 (CONVERT) !Arg1 INTO UNIT50.
EXECUTE.
!ENDDEFINE.
Or use Enclose (note how now !Arg1 is inside parenthesis),
DEFINE TEST3 (Arg1 = !ENCLOSE("(",")"))
RECODE unit4 (CONVERT) (!Arg1) INTO UNIT50.
EXECUTE.
!ENDDEFINE.
Always remember when you are having problems with macros to use "SET MPRINT ON." and try to debug the macro yourself.