I'm trying to read between the lines a little bit, but it seems to me you want to execute operations on your task resources, not just assign them state. So, that would be implemented in terms of a POST. However, you don't want to overload POST to mean different things on the same resource. For this, you could use "controller" resources.
For example, to acquire a task (e.g. for a worker to "claim" the task and begin executing it), the worker could POST to /tasks/allocator, with a payload specifying the URI of the task the worker wants to claim (maybe with no payload, the allocator could assign one based on position in queue, priority, etc.). This would have the side effect of changing the state of the task (e.g. change status to "in progress", record the ID of the worker, the start time, etc.).
Updating a task in progress could be a PUT if you're just changing its state. If you're doing something more complicated then maybe POST to a different controller resource.
Releasing the task could also be a PUT, if you're just changing its state (e.g. clearing the assigned worker ID, changing its status, recording the completion time). Or again, it could be another POST to a different controller resource if there's more to it.