Deleting and updating with a WHERE clause requires that the data be readable so the correct rows can be removed or modified. It seems odd, but db_datawriter does not grant permission to select from database objects so, yes, the user must also either be a member of db_datareader or have specific SELECT permission on the objects to be modified.
Greg