After another hour of randomly stabbing at the source code, I've found the problem.
Hopefully, by actually posting a frigging patch I can save others the headache.
Take the yahoo-transport 2.3.2 source and apply this patch:
--- yahoo-message.c.orig Mon Aug 29 14:17:01 2005
+ yahoo-message.c Mon Aug 29 14:11:05 2005
@@ -94,7 +94,7 @@
x = xmlnode
newtag("x");
xmlnode
putattrib(x, "xmlns", "jabber:x:event");
- xmlnode
insertcdata (xmlnode
inserttag (x, "id"), "ABCD", 4);
+/* xmlnode
insertcdata (xmlnode
inserttag (x, "id"), "ABCD", 4); */
xmlnode
insertnode(m, x);
yahoo_deliver(NULL,m);
That is, you need to prevent the transport from sticking an 'id' node in the messages it sends.