The magic lies in the undocumented parameter "ancestors".
Update a page via curl:
curl -u $user -H 'Content-Type: application/json' -d '{"id":"1234567890","type":"page","title":"Stuff","space":{"key":"SPACE"},"body":{"storage":{"value":" foo ","representation":"storage"}},"version":{"number":7}' https://confluence.example.com/rest/api/content/1234567890
Update a child page via curl:
curl -u $user -H 'Content-Type: application/json' -d '{"id":"1234567890","type":"page","ancestors":[{"type":"page","id":987654321}],"title":"Stuff","space":{"key":"SPACE"},"body":{"storage":{"value":" foo ","representation":"storage"}},"version":{"number":7}' https://confluence.example.com/rest/api/content/1234567890
via Scott Dudley