Content filters run in an order plugins fight over

the_content is a queue every plugin joins, and priority decides the outcome. A shortcode that renders as text, a paragraph tag wrapped around a block element, and an oEmbed that stopped embedding are all the same problem.

// core, for orientation
// 8   run_shortcode
// 10  wpautop
// 10  wptexturize
// 11  do_shortcode
// 16  convert_smilies

add_filter( 'the_content', 'shop_wrap_tables', 12 );   // after shortcodes expand

A filter needing the raw stored content must run below 8; one needing finished HTML must run above 11. Returning anything other than a string breaks every filter after yours, which presents as an unrelated plugin failing. When two plugins genuinely conflict, moving one with remove_filter and re-adding it at a different priority is the blunt instrument that works.