The date format you are using is correct, but you need to remember that all the rules of the timeline engine also apply to the APIs. This means that predecessors and task constraints affect the dates on the tasks. If you would like to pin the task to a certain date you would need to use a FIXT, MSO, or MFO taskConstraint.
/api/task/abc123?method=POST&sessionID=abc123&plannedCompletionDate=2015-05-02T08:00:00:000-0500&taskConstraint=MFO...
It a way, you have been setting the date, hence it doesn't throw an error, but the project then recalculates the timeline and changes it right back to what it was before. The taskConstraint will force it to follow the date you put in.