Why WP_Query’s ‘s’=>’keyword’ searches only for ‘post_title’ and why not ‘post_content’?

WP_Query‘s s parameter in it’s arguments IS used to search the post_content too.

There must be something that is altering this behaviour.

Looks like there’s a method inside your class that is altering the query: posts_where.

Or maybe it’s that you’ve put the s argument into an array of it’s own, rather than being part of the $args array itself.

The posts_where filter allows you to edit the SQL search query, before it is sent. Removing that code shouldn’t ‘break’ your code, but will probably produce different results.