urlencode($jsonEncodedData) resolved the problem for me.
private function rest_request($call_name, $call_arguments) {
$ch = curl_init();
$post_data = 'method='.$call_name.'&input_type=JSON&response_type=JSON';
$jsonEncodedData = json_encode($call_arguments);
// $post_data = $post_data . "&rest_data=" . $jsonEncodedData;
$post_data = $post_data . "&rest_data=" . urlencode($jsonEncodedData); ....
Nice wrapper, but I had the same problem as described in this post:
http://forums.sugarcrm.com/f6/adding-email-addresses-via-rest-plus-sign-replaced-space-setting-relation-81743/
urlencode($jsonEncodedData) resolved the problem for me.