After granting View/Add/Edit/Open/Delete ListItems to group on a list, the users of the group still get Access Denied when trying to access the list. Here's the code I used to grant permissions:
var group = clientContext.Web.SiteGroups.GetById(id);
clientContext.Load(group);
clientContext.ExecuteQuery();
BasePermissions permissions = new BasePermissions();
permissions.Set(PermissionKind.ViewListItems);
permissions.Set(PermissionKind.AddListItems);
permissions.Set(PermissionKind.EditListItems);
permissions.Set(PermissionKind.OpenItems);
permissions.Set(PermissionKind.DeleteListItems);
RoleDefinitionCreationInformation rdcInfo = new
RoleDefinitionCreationInformation();
rdcInfo.Name = "roleDefName";
rdcInfo.Description = "Description";
rdcInfo.BasePermissions = permissions;
RoleDefinition roleDefinition =
clientContext.Site.RootWeb.RoleDefinitions.Add(rdcInfo);
RoleDefinitionBindingCollection RoleDefinitionBindingColl = new
RoleDefinitionBindingCollection(clientContext);
RoleDefinitionBindingColl.Add(roleDefinition);
List targetList = web.Lists.GetByTitle(listTitle);
targetList.BreakRoleInheritance(true, false);
RoleAssignmentCollection collRoleAssign = targetList.RoleAssignments;
RoleAssignment rollAssign = collRoleAssign.Add(group,
RoleDefinitionBindingColl);
web.RoleAssignments.Add(group, RoleDefinitionBindingColl);
web.Update();
clientContext.ExecuteQuery();