So I've researched this on several occasions (more than I should, admittedly) and the most accurate/common definitions I've found are:
Fault - actual line of code that causes the error
Error - incorrect internal state (manifestation of the fault)
Failure - what the program does wrong as a result of the fault/error