I created a work-around by caching the feed as a transient. So instead of:
$feed = fetch_feed( $feed_url );
You would do:
// Require for dealing with feeds
require_once ( ABSPATH . WPINC . '/class-feed.php' );
// Check if feed transients exists
if( false === $feed = get_transient( 'foo_transient_key' ) ) {
// If not, fetch it
$feed = fetch_feed( $feed_url );
// Store as transient for 4 hours
set_transient( 'foo_transient_key', $feed, 4*60*60 );
}
// You now have an object $feed just like you did before
Now you’ll only fetch the feed once every 4 hours, and W3TC will cache your page the rest of the time.
This seems to fix the problem. I always thought fetch_feed does its own transients/caching though. Either way, it’s still weird W3TC skips entire pages for one simple fetch.