Operations and Maintenance (O&M) constitute a major contributor to offshore wind's cost of energy. Due to the harsh and remote environment in which offshore turbines operate, there has been a growing interest in opportunistic maintenance scheduling for offshore wind farms, wherein grouping maintenance tasks is incentivized at times of opportunity. Our survey of the literature, however, reveals that there is no unified consensus on what constitutes an "opportunity" for offshore maintenance. We therefore propose an opportunistic maintenance scheduling approach which defines an opportunity as either dispatch-based (initiated by a maintenance crew already dispatched to a neighboring turbine), production-based (initiated by projected low production levels), or access-based (initiated by a provisionally open window of turbine access). We formulate the problem as a rolling-horizon mixed integer linear program, and propose an iterative solution algorithm to identify the optimal hourly maintenance schedule, which is found to be drastically different, yet substantially better, than those obtained using offshore-insensitive strategies. Extensive evaluations on actual wind, wave, and power data demonstrate substantial margins of improvement achieved by our proposed approach, across a wide variety of key O&M metrics.