Object.matrix_basis - If you want to modify the loc/scale/rotation directly, as a matrix - without having to worry about what kind of rotation is used - (Euler, Axis-Angle, Quaternion).
Object.matrix_local - Exporters where you want to write out parent relative transformation.
Object.matrix_parent_inverse - Any tools that handle the transformation relationship between parents and children. (Not used often)
Object.matrix_world - Any time you want to know the final transformation of an object after animation, drivers, constraints and parenting are applied. You would want to use this for example - if you are writing to a format like OBJ which doesn't store object transformations.