Once any progress is posted to a task the date that the task begins is fixed
in granite, as well as the date for any work that has been performed for a
task marked partially complete, and leveling won't move it. That MAY be a
partial reason for your issue.
Slack time is not input, it is computed. Simplified, it is the amount of
time a task could be delayed without delaying the end of the project.
Consider a set of 3 tasks, not linked together... A duration 2 days, B
duration 4 days, C duration 5 days. They all start on the project start
date. As it sits, the project finish is when task C finishes, 5 days out.
So task A COULD be delayed up to three days before it becomes the last task
to finish and takes over as the determiner of the project finish date. A is
said to have 3 days slack time. Similarly B has 1 day slack time for the
same reason. Now is you have all three of these tasks assigned 100% to the
same resource, he'll be over allocated. But the only way to resolve that
overallocation is to sequence these tasks and to do that, the finish date
must be allowed to move out into the future - regardless of the order of
tasks, doing them in sequence means the project duration must go from 5 days
to 10 days. But if "level within available slack" is turned on, the
leveling engine will abort as soon as the slack time is eaten up and the
finish date starts to move out from the original 5 days. The result will
not be a linear sequence bur rather A will pushback 3 days to start on day
4, B will pushback 1 day to start on day 2, and C will not move at all. The
tasks will remain in parallel and the resource will remain overallocated,
the only change being that the tasks now all finish together instead of
starting together and the resource overallocation is occuring at the end of
the week rather than at the start.