1) None... with minor exceptions...
2) simply put: client_cmd() is used to "set" a client attribute (ex. you would do a client_cmd(id, "name", "whatever") to force a name change), while engclient_cmd() is used for "pure" commands (you would do an engclient_cmd(id, "drop") to force the player to drop the current weapon). Mostly you would use engclient_cmd() if the command has no arguments. Note that you cannot control your player with either of them. Movement, combat, etc. actions are handled in another way.
For the problem at hand: you would have to give the weapon first and make it the current weapon.
If you'r unable to test it "live" the you should use a message-logger.
There was a tut about this a while ago... I can't find it atm...