Your Activities class is just a way to collect together different types of activities. To keep it from polluting the rest of your schema, I would separate it from your other classes. That will free your mind to focus on Projects, Tasks, and Reports on their own merit within the schema structure.
Once you figure that out, you can go back and add your activities class. Call it a "cross-cutting" concern if you want. It would look something like this at the table level:
Table: Activities
Fields: ActivityID PK Int Identity
ActivityType Int <-- tells you the originating table
OriginatingID Int <-- from the PK of the originating table
Description ..etc.
Time tracking has its own table/class.
You may be wondering, how do I draw lines between my Activities class and my other classes in the designer. You don't. You can do ad-hoc joins to your other tables/classes as needed using Linq.
If you are using a repository pattern, you can include code in your repository that adds or updates the records in the Activities class automatically, when a caller updates a Project, Task, Report, etc.