Mass file renaming via regex
using Regex.Replace with a help of PadLeft would do this in a single line. so your work can be simplified to : 

foreach (var file in Directory.GetFiles(path, "*.epub", SearchOption.AllDirectories)) 
{
    var fileName = System.IO.Path.GetFileName(file);
    var filePath = System.IO.Path.GetDirectoryName(file);//gets the path sans the  file                 
    var strName  = Regex.Replace(fileName, @"^((\d+\.){1}(\d\.)?\s+)", m =&gt; m.Groups[0].Value.Trim().PadLeft(4, '0').PadRight(8));

    File.Move(file, Path.Combine(filePath, strName));
}


The regex should covers any string with the same pattern in your provided sample. 

UPDATE : 

To make it more readable for you, you can use the following : 

var regex = new Regex(@"^([0-9]+\.?\.\s)");

var fileName = new StringBuilder();

foreach (var file in Directory.GetFiles(path, "*.epub", SearchOption.AllDirectories))
{
    fileName.Append(Path.GetFileName(file));
    var filePath = System.IO.Path.GetDirectoryName(file);

    var match = regex.Match(fileName.ToString());

    if (match.Success)
    {
        fileName.Clear();
        fileName
            .Append(match.Value.Trim().PadLeft(4, '0'))
            .Append("    ")
            .Append(file.Substring(match.Value.Length).Trim());
    }

    fileName.Replace(fileName.ToString(), Path.Combine(Path.GetDirectoryName(file), fileName.ToString()));

    File.Move(filePath, fileName.ToString());

    fileName.Clear(); 
}


Using StringBuilder is a must in your case, since you're dealing with a list of files name, and since string is immutable, using StringBuilder will avoid creating a new string for each filename which would save your memory and also optimize the performance.