glBufferDate(GL_TRANSFORM_FEEDBACK_BUFFER, sizeof(float) * 16, NULL, GL_DYNAMIC_COPY);
Is this line not supposed to be:
glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, sizeof(float) * 16, NULL, GL_DYNAMIC_COPY);
Note the "glBufferData" not "glBufferDate". This will also support the fact that you are not getting any data in the buffer / 0 is being returned....