How does epoch-wise double descent occur if training error is 0? In this paper, they talk about the existence of epoch-wise double descent. In Figure 10, you can see that, with a sufficiently large model, the test error keeps decreasing even after the training error has become 0. 
In my understanding, SGD should not change any weights once the training error is 0, since gradients would also be 0.

So why does the test error keep decreasing? Is it because of the momentum of the optimizer?

I think the answer turns in what the authors mean by "error." If they mean "proportion of misclassified samples," then the meaning is obvious -- you can trivially have a nonzero loss function value (e.g. cross entropy) but 0 error.
Here's a concrete example. In a two-class classification problem, all negative examples have predicted probability of being positive of 0.49, and all positive examples have predicted probability of being positive of 0.51. Using the decision rule that classifies as positive if the predicted probability is greater than 0.5, otherwise negative, then the misclassification rate is 0. However, the log-loss is $-n \log 0.49 - p \log 0.51 > 0$ where $n > 0$ is the number of negatives and $p > 0$ is the number of positives.
