Bugger, I should really have looked a little further.
The answer is to create another context menu like this:
<telerik:RadSchedulerContextMenu runat="server" ID="SchedulerAppointmentContextMenu">
<Items>
<telerik:RadMenuItem Text="Arrived" Value="1" ImageUrl="~/Images/add.png" ></telerik:RadMenuItem>
<telerik:RadMenuItem Text="Cancelled" Value="2" ImageUrl="~/Images/cancel.png"></telerik:RadMenuItem>
<telerik:RadMenuItem Text="Details" Value="3" ImageUrl="~/Images/telephone.png"></telerik:RadMenuItem>
</Items>
</telerik:RadSchedulerContextMenu>
<telerik:RadSchedulerContextMenu runat="server" ID="SchedulerAppointmentContextMenuNotToday">
<Items>
<telerik:RadMenuItem Text="Cancelled" Value="2" ImageUrl="~/Images/cancel.png"></telerik:RadMenuItem>
<telerik:RadMenuItem Text="Details" Value="3" ImageUrl="~/Images/telephone.png"></telerik:RadMenuItem>
</Items>
</telerik:RadSchedulerContextMenu>
And then bind the appointment to whichever menu you need:
protected void scheduleDiary_AppointmentDataBound(object sender, SchedulerEventArgs e)
{
if (e.Appointment.Start.Date != DateTime.Now.Date)
e.Appointment.ContextMenuID = "SchedulerAppointmentContextMenuNotToday";
e.Appointment.BackColor = System.Drawing.Color.Red;
}