Inpaint method is one approach, but I have never been pleased with the quality of automatic fills and I end up doing it by hand for any tile that matters.
There is a different method that I think often produces a better result. The idea is to overlap the edges of the image rather than joining them flush, and then "intelligently" choose a clipping path inside the overlap area. This comes at the cost of shrinking your image but I believe the quality is worth it, which is better than other automatic methods I have seen, although it doesn't work on all images. This Photoshop filter uses this method; the path it chooses is irregular to obscure the line, and it is placed where the images are most similar to minimize the seam.
You will find that it is necessary for an image to be self-similar on its edges if it is going to tile correctly. To help achieve this I suggest using frequency processing to remove the low frequency components of the image, removing gradients.
I do not have the filter referenced above but I shall attempt to show this process manually.
Here is my selected base image:
Here is what it looks like under internal rotation:
Here is the base image after frequency processing (approx. a 50px high pass, but preserving very-low-frequency information):
Here is the processed image under internal rotation (you can see the improvement):
Returning to the processed image, I overlap the right edge over the left edge by 50 pixels, placing the overlap on a separate layer:
Then I erase from the top (overlapped) layer the parts of the edge that are high contrast:
Then I overlap the bottom over the top by 40 pixels:
And once again erase the parts that have high contrast along the edge:
The process is now complete. Here is the result tiled over a larger area: