Eventually found the solution to this:
If you use JSON in a POST to a REST service, the JSON object is not treated as a valid query string. So, the POST array will exist, but it will be empty.
Here is the work-around:
$post_vars = file_get_contents('php://input');
// Second parm TRUE, decodes into associative array
$data = json_decode($post_vars, TRUE);