Yep, indeed something broken.
That's a... I'm not if calling it a fix is right, or maybe workaround sounds better, though it seems to work on few testings (I don't think it's particularly elegant though).
The file is sources/controllers/Memberlist.controller.php.
After:
$input_fields = isset($this->_req->query->fields) ? explode(',', $this->_req->query->fields) : $this->_req->post->fields;
add:
if (isset($context['columns'][$sort]))
$input_fields[] = $sort;
before (or after, it doesn't matter):
$context['old_search_value'] = $search;
add:
$input_fields = array_unique($input_fields);
and finally, replace:
$customJoin[] = 'LEFT JOIN {db_prefix}custom_fields_data AS cfd' . $curField . ' ON (cfd' . $curField . '.variable = {string:cfd' . $curField . '} AND cfd' . $curField . '.id_member = mem.id_member)';
$query_parameters['cfd' . $curField] = $curField;
$fields += array($customCount++ => 'IFNULL(cfd' . $curField . '.value, {string:blank_string})');
with:
$customJoin[] = 'LEFT JOIN {db_prefix}custom_fields_data AS cfd' . $field . ' ON (cfd' . $field . '.variable = {string:cfd' . $field . '} AND cfd' . $field . '.id_member = mem.id_member)';
$query_parameters['cfd' . $field] = $curField;
$fields += array($customCount++ => 'IFNULL(cfd' . $field . '.value, {string:blank_string})');
that should do.