Display all posts that use a custom taxonomy

I think your problem is here:

'terms' => array($clients_terms->slug)

You define $clients_terms like so:

$clients_terms = get_terms('clients');

…which will return an array of objects. But you try to access it as an object in your query args. That should be producing some kind of PHP notice? (Trying to get property of non-object, or something?)

Try building the array, then passing it to 'terms':

// Get the array of objects
$clients_terms_objs = get_terms( 'clients' );

// Define terms array
$clients_terms = array();

// Step through array of objects,
// and populate terms array
foreach ( $clients_terms_objs as $clients_term_obj ) {
    $clients_terms[] = $clients_term_obj->slug;
}

// Construct query
$clients_query = new WP_Query( array(
  'post_type' => 'work',
  'posts_per_page' => 4,
  'tax_query' => array(
       array(
          'taxonomy' => 'clients',
          'field' => 'slug',
          'terms' => $clients_terms
       )
    )
) );