Thanks for your inquiry. We suggest you please read about Aspose.Words' DOM from here:
You are facing the expected behavior of Aspose.Words. The BookmarkEnd node of "bm1" is after the paragraph break mark (at the start of paragraph 3). Please check the attached DOM image for detail.
Please use following code example to get the desired output. Following code example inserts the BookmarkEnd node at the end of paragraph 2.
Document doc = new Document(MyDir + "Paragraph-in-bookmark.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
Bookmark bm = doc.Range.Bookmarks["bm1"];
paragraph.AppendChild(new BookmarkEnd(doc, "bm1"));
doc.Save(MyDir + "Out v17.1.0.docx");