I've found why its happening.
In Aspose.Word 3.x, DocumentBuilder.ParagraphFormat property actually "attaches" to the object that represents formatting properties of the current paragraph. Therefore, if the cursor is moved to another paragraph (and this is the case with inserting a paragraph break), the ParagraphFormat property is "reattached" to a different object.
Borders b1 = builder.ParagraphFormat.Borders;
//This moves the cursor to the newly inserted paragraph.
//b2 is a different object from b1 in Aspose.Word 3.x because ParagraphFormat and Borders are now attached to a different paragraph.
Borders b2 = builder.ParagraphFormat.Borders;
//It is true, they are different objects.
Debug.Assert(b1 != b2);
So the problem is that you cache the pointer to ParagraphFormat.Borders in a local variable called borders. When the cursor in the document builder moves to another paragraph, your borders variable remains pointing to the original (first) paragraph.
I think this is a problem in Aspose.Word since it should not have broken the backward compatibility this way and we will try to fix it. To workaround in the meantime, just don't cache ParagraphFormat.Borders in a local variable.
DocumentBuilder b = new DocumentBuilder();
b.ParagraphFormat.Borders[BorderType.Bottom].LineStyle = LineStyle.Emboss3D;
b.Font.Bold = true;
b.ParagraphFormat.Borders[BorderType.Bottom].LineStyle = LineStyle.None;