roomTypeCode, found here http://developer.ean.com/docs/hotel-list/#roomTypeCode, represents a unique room configuration for a given property. So you may have for a double room various room configurations, like including Internet or not, including breakfast or not. So, a hotel may have X number of RoomTypeCode(s), depending on their pricing configuration (that is what makes a RoomTypeCode unique).
The rateCode(s), found here http://developer.ean.com/docs/hotel-list/#rateCode, are given out and live in the system for about 15 minutes. These are given by the property and fluctuate due to the dynamic of the business and availability.
rateCode(s) may repeat themselves after some time. RoomTypeCode(s) may be reassigned after a while also, but the basic configuration for a given property are unique.
The element that links these two elements and needs to be confirmed throughout the booking path (from Avail towards Book) is rateKey. Make sure you add this one in the booking request alongside with the persistent values of roomTypeCode and rateCode.