This is most likely because you are confused by the naming of Fields.
... AND, because the demo apps DO NOT adhere to the "preferred" "Bailey" naming method of fields.
This error is saying that you're trying to assign a String to BO, or vice-versa.
The error is most likely in just 1 assignment statement somewhere in your code/rules.
The way the sample apps name fields, its hard to tell from looking at Rules if the field on the right side of the = is a field or a relationship.
If you see OutgoingEmail.Recipient = Invoice.Customer
then you cannot tell from only that if Customer is a field in the Invoice table -OR- if Customer is a relationship from Invoice
(in v8.5, the new Coloring helps)
BUT if these fields had been named "better", then it might appear like this:
1) OutgoingEmail.Recipient = Invoice.ps_Customer
this is now clear that you are assigning a BO Instance to Recipient
If you were trying to assign the Customer NAME to Recipient, then you would have had to write this:
2) OutgoingEmail.Recipient = Invoice.ps_Customer.Name
In # 1 above, if Recipient is a Plain Text field, you'd get the error you're getting because as the error says, an "Ientity" (whatever that is in Java) is not the same as a String
In # 2 above, if Recipient was a Reference, then the same would apply in reverse - trying to assign a String (the Cust Name) to a "Ientity"
3) If OutgoingEmail had named its field "correctly", then by observation, you'd be able to see what was required. "OutgoingEmail.ps_Recipient" would IMPLY that it can ONLY be assigned an Instance of a BO, not a field (as in #2)
So, in my opinion, because you've followed examples (almost literally), you've just got a semantic TYPE error somewhere.