Thank you to Zabe who pointed this out!
https://github.com/skeeto/elfeed/issues/376
To summarize: elfeed resets the entry's slots with the information provided by the feed whenever it fetches the feeds. To get around this, you can put your custom content in a metadata slot, since metadata slots are not reset. The problem now is that elfeed regularly deletes any elfeed-refs that aren't in the content slot of an entry. I posted a possible solution in the issue I linked, and just made a pull request to implement it: https://github.com/skeeto/elfeed/pull/457