What’s the difference between “parent” and “category_parent” in a WP_Term object?

The properties prefixed with category_ or cat_ are there for backwards compatibility.

Taxonomies and terms were introduced in WordPress 2.3 (11 years ago) and categories were converted into a taxonomy at that time. Prior to this categories had their own properties (the ones with the aforementioned prefixes).

For backwards compatibility, the _make_cat_compat() function is used in some places to add the old properties to categories. You can see from the source that all it does is copy the standard term properties to the old names, so parent and category_parent will always have the same value, as an example.

In 2018 you should avoid using the category-specific properties.