The signup_admin_form_sql() function returns its queries with a db_rewrite_sql:

return array(db_rewrite_sql($sql), db_rewrite_sql($sql_count, 's'));

When using node_access permissions, the query gets a join to the node_access table, which has multiple entries to a event nid (with different realms), which then produces a wrong count for signup_total (a multiple of, depending of the number of entries in the node_access table)

Original query:

SELECT DISTINCT n.nid, n.title, n.type, s.status AS signup_status, COUNT(s_l.nid) AS signup_total, s.close_signup_limit AS signup_close_signup_limit, signup_alias_event.field_kal_datum_value 
FROM node n 
INNER JOIN signup s ON s.nid = n.nid 
LEFT JOIN signup_log s_l ON s.nid = s_l.nid 
LEFT JOIN content_type_event signup_alias_event ON signup_alias_event.vid = n.vid 
WHERE (s.status = 1) 
GROUP BY n.nid, n.title, n.type, signup_status, signup_close_signup_limit, signup_alias_event.field_kal_datum_value ORDER BY n.title ASC

With node_access:

SELECT DISTINCT n.nid, n.title, n.type, s.status AS signup_status, COUNT(s_l.nid) AS signup_total, s.close_signup_limit AS signup_close_signup_limit, signup_alias_event.field_kal_datum_value 
FROM node n 
INNER JOIN signup s ON s.nid = n.nid 
LEFT JOIN signup_log s_l ON s.nid = s_l.nid
LEFT JOIN content_type_event signup_alias_event ON signup_alias_event.vid = n.vid 
INNER JOIN node_access na ON na.nid = n.nid 
WHERE 
(na.grant_view >= 1 AND ((na.gid = 0 AND na.realm = 'all') OR (na.gid = 2 AND na.realm = 'term_access') OR (na.gid = 3 AND na.realm = 'term_access'))) 
AND ( (s.status = 1) )
GROUP BY na.gid, n.nid, n.title, n.type, signup_status, signup_close_signup_limit, signup_alias_event.field_kal_datum_value ORDER BY n.title ASC

For now I removed the db_rewrite_sql(), since only users with the "administer all signups" permission can access that function, and it does not conflict with our site's security model, but I can't think of a better solution here (and would like one :) )