I just helped another client with similar tasks. You should first go to Gmail online and check out where messages are filed. Note the specific names of mailboxes/labels. In Gmail Settings > Labels, ensure that you're the labels you want to see in Mail are checked Show in IMAP. Those you don't need to see locally you can uncheck.
Then, in Mail, go to Mailbox > Synchronize > Gmail. Any change after Mail does its business? You can monitor the process in the Activity window.
Secondly, it sounds like you have some duplicate mailboxes. Look at the ones that hopefully are mapped inside your consolidated Inbox, Drafts, Sent, Junk, Trash mailboxes up top of the Mail sidebar. Compare them respectively to the ones in the Gmail parent mailbox at the bottom of the sidebar.
As you find messages that belong in a different mailbox, you can put them there (or delete them if you don't need them). In particular, note that Gmail calls its main sent mailbox "Sent Mail," so any mailbox of a different name is the incorrect one and should be merged with Sent Mail.
When you finish sorting through mail and removing messages from the wrong folders, you can remove the duplicate labels from the bottom section of Gmail's Label settings pane. On the next sync with Mail, they should disappear. Finally, I recommend mapping any Gmail folders that aren't already. If one appears at the bottom of the sidebar, select it and choose Mailbox > Use This Mailbox For > [type of mail in folder].
Anything else?