So yes this is possible (many thanks to Michael Stimson for his help - the solution is basically in his comments, I'm just putting it all together here).
On the Python Side:
You'll need imports for the usual suspects (sys, os, and arcpy).
Get the COM functions you'll need from the "comtypes" library for Python (Google it) ... and import the framework while you're at it.
from comtypes.client import GetModule, CreateObject
Load the framework COM module
modFramework = GetModule(<Your ArcGis Path> + r"com\esriFramework.olb")
Create the app
pApp = CreateObject(modFramework.AppROT, interface=modFramework.IAppROT)
From it get a pointer to the document (NB: You want the Doc not the MXDoc)
pDoc = pApp.Item(0).Document.QueryInterface(modFramework.IDocument)
Form there I got the Command Bars (could probably have skipped this).
pCmdBars = pDoc.CommandBars.QueryInterface(modFramework.ICommandBars)
Use the CommandBars "Find" to get a pointer to your Addin
pAddIn = pCmdBars.Find(<Your Addin Name>)
I used the "Tag" field to pass some params to the addin (optional)
pAddIn.Tag = <Some data (e.g. parameters) you want to pass to the addin>
Then execute (start) the addin
If your addin is a "Button" that will call "OnClick".
On the C# side:
You don't need to do much if anything here. All I did was get the command bar and extract the Tag text (which I'd packed params into).
ICommandBars commandBars = ArcMap.Application.Document.CommandBars;
ICommandItem item = commandBars.Find(<Your Addin Name>);
item.Tag *<-- text is here*
It's convoluted, but that's one way to do it (there may be others).