I'm not an expert in this area, but I'm fan of hotkey driven productivity and a frequent user of AutoHotkey. I've thought on the subject quite a bit, and on numerous occasions I've run into challenges related to trying to come up with custom hotkeys that don't conflict with existing OS/Application hotkeys.
There must be resources out there on the subject, but honestly I haven't come across any deep research on hotkey thus far, aside from brief mentions with respect to usability. I would echo what some of the commenters are saying with respect to the fact that hotkey assignment often falls under the broad umbrella of UX/Usability, so you might have better luck in another venue.
Regardless, a few thoughts that may help:
1.) Most frequently used commands should have a low key-distance
By 'low key distance' I mean the distance you need to stretch a single hand in order to trigger a hotkey. On the Windows platform a classic example is Ctrl + C (copy) and Ctrl + V (paste). Because V falls within the left hemisphere of the keyboard, a user can use the mouse and the keyboard shortcuts simultaneously to great effect.
If you expect users of your software to be using a mouse at all times, consider everything past the G key on a standard US-QWERTY keyboard to be off-limits for high-frequency hotkeys.
2.) Put hotkeys into logical groups
This goes without saying, use a logical hierarchy when assigning hotkeys.
3.) Develop a generalized strategy if you have a large number of hotkeys
You might be able to get away with a few hotkeys such as cc for color captioning, but I don't think it's advisable. An application with a need for many hotkeys most likely has many distinct operations which share a first letter. Likewise, a same-letter hotkey would require you to have a wait-and-listen interval after every keypress, which is more likely to slow down and annoy a power user than help him. Your strategy will have to depend upon what keys you can sacrifice for hotkey activation, how many combinations you need, and what feels intuitive.
A couple of strategies I've observed that seem to be effective. (Both of them utilize hotkey tree traversal)
a.) Utilize chords - Visual Studio uses multi-key chords for IDE hotkeys. They don't always make a lot of sense, but the ones that do tend to follow a standard two-part convention. ->
One good example of this is the 'refactor' chords:
Chord Root: Ctrl + R
Chord Commands:
- Encapsulate Field
- Extract Interface
- Extract Method
- Remove Parameters
- Rename
- Reorder Parameters
The upside of this is that by forcing the initial keystroke of certain hotkeys to be a 'chord activation' you get significantly more hotkeys from the same effective area of the keyboard... The downside is that it's a bit confusing and with this scheme you may have more key presses overall, since the initial keystroke for many commands may be a chord activation.
b.) Use context-aware hotkey traversal
In addition to the standard application-specific hotkeys, all of the more recent Microsoft Office applications have an interesting means of menu traversal activated by the Alt key.
A couple of images will make it easier to explain:
I open Word 2013, then press Alt, and I see the top level menu tree highlighted

From there, I press I and see the next layer of hotkeys highlighted

As you can see, this approach could potentially give you as many hotkeys as you want, provided you are willing to go a few layers down for certain hotkeys, you're willing to force the user to start at a specific root keypress. I would say that this approach is better suited to extremely hierarchical shortcuts, as opposed to the more ad-hoc chord approach.
Regardless of the approach you come up with, there will always be some sort of tradeoff between efficiency, complexity and ease of use. The more complex you make the hotkey system, the more you will want to offset it with visual cues and reference documentation.
Lastly I don't know what you're building, but I would also take a good look at similar applications, to see what they are doing. Users often expect a similar hotkey scheme between applications in the same problem domain. If there is already an application you'd consider the industry standard, consider adopting some of their hotkeys to ease the transition.
Hope this helps!