When XWPFParagraph is created any runs in Hyperlinks and Fields are added into the runs/iruns lists. When these runs are removed/inserted the index on the base base R list is different to the index on the runs/iruns list. This means runs after a hyperlink/field run can't be manipulated properly. We need to calculate the correct position in the R list based on the run list which contains R runs plus hyperlink/field runs.
Created attachment 33280 [details] PATCH
Thanks for the patch! It should be applied now via r1722503, removeRun() already seems to take this into account correctly.