Rationale
nImproves the design
nSimplifies the software
nHelps identify errors
nPrevents decay
Here are some reasons for refactoring.

In this case the design that is being improved is often very detailed design that is not necessarily part of any design document.

Simplifications are often made to things like spaghetti code.  Sometimes they have to do with realizations made after the first coding pass.

The more clear and concise the code, the easier errors can be identified.

Refactoring avoids the quick fix dilemma that results in patchwork programs.