Insert data into table where 4 fields are the same and the fifth changes
No loops are needed in this (please!).

You should be doing an INSERT...SELECT.

Always run the SELECT part of the statement on it's own first, to make sure it is only selecting what you expect to be inserted.

INSERT INTO subscription(username,name,startdate,enddate,saledate,pkgid)
SELECT DISTINCT
  username,
  name,
  startdate,
  enddate,
  saledate,
  41
FROM subscription;


If there is a specific startdate and enddate you want to use for all users, then you'll need to set them as variables.

DECLARE @startdate DATETIME;
DECLARE @enddate DATETIME;

SET @startdate = '2015-05-21 10:00:00.000';
SET @enddate = '2015-06-21 00:00:00.000';

INSERT INTO subscription(username,name,startdate,enddate,saledate,pkgid)
SELECT DISTINCT
   username,
   name,
   @startdate,
   @enddate,
   NULL,
   41
FROM subscription;