Strange behaviour, but any way. I changed the following rows :
backendProject.ProjectDataSet project = projectClient.ReadProject(task.ProjectId, backendProject.DataStoreEnum.WorkingStore);
projectClient.QueueUpdateProject(jobId, sessionId, project, false);
with these ones:
backendProject.ProjectDataSet project = new backendProject.ProjectDataSet();
projectClient.QueueAddToProject(jobId, sessionId, project, false);
and all worked. Looks like you can add task only to not initialized project.