It sounds like you have a couple issues.
To start with, multiple critical paths are often caused by tasks with missing dependency relationships, either successor, predecessor, or both. My first suggestion is to make certain every task has both (except very first and last tasks).
For your scheduling issues, what’s driving the need to make every task Fixed Duration? Is it truly work that must be done in X days regardless of how many hours a resource works in that time? Fixed Duration tasks have two inherent problems. 1) You need to provide the duration (project will calc if none provided, but from then on it’s locked). 2) If resources have more work than can be completed in the fixed duration (think 80 hours in 5 days) then Project will simply adjust their allocation accordingly and the resource will end up over allocated.
While there are scenarios where Fixed Duration makes sense, I’ve found that most effort driven tasks should be configured as Fixed Units so that duration is driven by the assigned work divided by the resources availability (assignment units).
I will refer you to two other sources for additional scheduling and leveling information.
Please see “Wanting to enter resources for tasks and have units assigned at 100%” topic in this forum from a few days earlier. It has notes about the background formulas used by Project during scheduling.
And second, since you seem to be frustrated with MS Project scheduling, I’ll refer you to a series of MPUG articles on leveling. The first is Scheduling vs Leveling: http://www.mpug.com/articles/resource-leveling-scheduling-vs-leveling/
While these articles get into the mechanics of how leveling works, they also provide guidelines for things to check before leveling and some tips on how to debug leveling issues.
Hope this helps