Ok, cracked it.
Calendar list - obviously each item in a list has an ID associated with it. For some reason I had to create a calculated column. I called mine EventID, I just copied the ID field to this field.
On your form add a field which acts as a place holder. I hide my placeholders on an Admin view. When you publish the form, publish the field as a parameter field, NOT a column name.
Create a site page, add an InfoPath form webpart and a Query String (URL) Filter webpart. Set the Query String Parameter Name.
Connect the query string filter to the InfoPath webpart.
On your calendar list, create another calculated column. Change its type to a NUMBER, not a string of text
I used the following formula: =CONCATENATE("<DIV><a href=","http://mydummysite.com/sitepage.aspx?querystingparametername=",EventIDcolumnname,">","LinkText","</a></DIV>")
You might have to play around with the formatting of your url depending on your locale and version of SP etc.
After that you can set fields in your form, based on matching the ID value to the placeholder field value.