If you clear a banner's patterns with
/data merge block x y z {patterns:[]}
The banner still shows as having patterns unless you relog (or fly away and come back).
Get yourself a banner with at least 1 visible pattern
Run the command above with the x y and z set to that banner's location
Observe that the banner still has a pattern
This is caused by BannerBlockEntity#saveAdditional not including an empty pattern list which when that is called due to network serialization for the ClientboundBlockEntityDataPacket, doesn't update the banner patterns on the client from what they previously were. Somehow an "empty" list of patterns has to be communicated to the client in order for it to update what it thinks the patterns are.
Can confirm.
Also, thanks for identifying and opening this! I apologize for initially reporting it as a Paper issue.