Q:

Subquery returned more than 1 value.  This is not permitted when the subquery follows...when Insert Indentity Column

Insert into Goals(UserID) values (@UserID)
Insert into ActivityGoals(GoalsID, ActivityID, Longest, Total, Start, [End]) 
values ((Select SCOPE_IDENTITY() from Goals), @ActivityID, @Longest, @Total, @Start, @End)

How to fix an exception? 

A:

The function SCOPE_IDENTITY() only returns one value; it cannot return more than one.   The problem is that you have this query:
select SCOPE_IDENTITY()
from goals

This returns one value for every row in goals -- your problem. 
Try this:
Insert into Goals(UserID) values (@UserID);

Insert into ActivityGoals(GoalsID, ActivityID, Longest, Total, Start, [End]) 
    Select SCOPE_IDENTITY(), @ActivityID, @Longest, @Total, @Start, @End);

Although this will work under almost all circumstances, the safest way to do this is using the output clause for insert:
declare @OutputIds table (id int); 
insert into Goals(UserID)
    output inserted. GoalId into @OutputIds
    values (@UserID);

Insert into ActivityGoals(GoalsID, ActivityID, Longest, Total, Start, [End]) 
    Select id, @ActivityID, @Longest, @Total, @Start, @End)
    from @OutputIds;

This also has the advantage (if you want) that you can insert multiple rows and capture all the ids.