I have created a hockey match simulation engine as part of an online hockey management game I built, it works pretty much how you have described only it runs each second rather than each minute. I think you're on the right track.
- All possible events are defined and given a baseline probability between 0-1. Each team has its own set of these event-probability pairs.
- Probability ratios are adjusted using formulas taking into account the ratings of the two teams.
- Each second of the game a "dice roll" is performed to determine which event (if any) has occurred.
- If an event occurs it breaks into a separate simulation whereby the players involved are selected (weighted based on their skills), and possibly further events are then tested for (ie. an attacking play may result in a shot on goal, a hit may result in a turnover, etc.)
- User-defined strategies modify the ratings for their team, thereby affecting event probabilities.
The trick lies in defining and tweaking appropriate probability ranges for each event, and coming up with formulas that result in the right probability given the ratings for each team you are comparing.