There is no free lunch in statistics. Elastic Net reduces overfitting (lowers variance) at the cost of increasing bias. With OLS, you could fit a model with all 50 variables. This OLS model would have very low bias (under certain assumptions, the coefficient estimates may be unbiased) but suffer from high variance (overfitting).
In your case, you mentioned that the OLS coefficients look very different than the Elastic Net coefficients, even though both models use the same 10 variables. The difference may be due to bias introduced by the fact that Elastic Net does not compute the coefficients by minimizing the residual sum of squares (which is how OLS computes the coefficients). Elastic net computes the coefficients by minimizing the "penalized" residual sum of squares.
Alternatively, the coefficient estimates may be different between OLS and Elastic Net due to sample size. With small sizes, p-values from OLS may not be reliable. With small sample sizes, the bias from elastic net may also be high.
Here's a simulated example using $n=25$. The "true model" contains only two variables, $x1$ and $x2$, with the "true coefficients" of 2 and 3. Due to small sample size and high irreducible error, the p-value for x1 is high (>22%). The coefficient differences between the two models are also high.
set.seed(1983)
nobs <- 25
x1 <- rnorm(nobs, 10, 10)
x2 <- rnorm(nobs, 20, 20)
x3 <- rnorm(nobs, 30, 30)
x4 <- rnorm(nobs, 40, 40)
y <- 100 + 2*x1 + 3*x2 + rnorm(nobs,0,100)
df <- data.frame(y=y, x1=x1, x2=x2, x3=x3, x4=x4)
### fit a linear model
lm.mod <- lm(y ~ ., data=df)
summary(lm.mod)
### fit an elastic net model using 5-fold CV
library(caret)
set.seed(1984)
enet.mod <- train(y ~ ., data=df, method="glmnet", tuneLength=5, trControl=trainControl(method="cv", number=5))
coef(enet.mod$finalModel, enet.mod$bestTune$lambda)
### compute diffs between coefs
lm.mod$coefficients - t(coef(enet.mod$finalModel, enet.mod$bestTune$lambda))[1,]
When the sample size is increased to $n = 1000$, the p-value for $x1$ is very low and the coefficient differences between the two models are small.
set.seed(1983)
nobs <- 1000
x1 <- rnorm(nobs, 10, 10)
x2 <- rnorm(nobs, 20, 20)
x3 <- rnorm(nobs, 30, 30)
x4 <- rnorm(nobs, 40, 40)
y <- 100 + 2*x1 + 3*x2 + rnorm(nobs,0,100)
df <- data.frame(y=y, x1=x1, x2=x2, x3=x3, x4=x4)
### fit a linear model
lm.mod <- lm(y ~ ., data=df)
summary(lm.mod)
### fit an elastic net model using 5-fold CV
library(caret)
set.seed(1984)
enet.mod <- train(y ~ ., data=df, method="glmnet", tuneLength=5, trControl=trainControl(method="cv", number=5))
coef(enet.mod$finalModel, enet.mod$bestTune$lambda)
### compute diffs between coefs
lm.mod$coefficients - t(coef(enet.mod$finalModel, enet.mod$bestTune$lambda))[1,]