Ok guys. After trying a million things, I think I have finally have a workaround for this.
1) Ensure the person who you have this iMessage problem with has an email address associated with their Apple ID and it is active for replying to iMessages in Settings > Apps > iMessage
2) Go to their Contact Card, long press [Message], select their email address
3) Send a message, which in my case then started a new iMessage thread separate from the old one
4) Delete the contact card entirely, but do not delete any messages.
5) Restart your phone
6) After phone is restarted ensure that the two iMessage threads (the one with the number, and the new one with the email) just show the number and email address and not their name. This confirms that you have no other contact card with their details in it.
7) Recreate their contact card, but ONLY put their email address into it. This should then reflect on the iMessage email thread to show their name.
8) Go back into the contact card and add their number, this should then merge the two iMessage threads.
9) From the contact card, select [Message] and again select their email address, send an iMessage from here.
This should now mean that the last message you sent to them is to their email. This will then force their iMessage to reply from their email instead of their number, and thus workaround the problem.
If at any time you start a new message to their number, or they start a new message from their number. E.g, sharing something from an app etc, then this will break the above and the problem will return. To fix this simply go back to step 9 and "restart" the iMessage thread to their email.
Please LMK if this works for you.